Я использовал sqlite DB для своего приложения, и мне нужно вызвать два одновременных запроса, но я даю ошибку как: Нагрузочный приложение из-за неперехваченного исключением «NSInternalInconsistencyException», причина: «ошибка подготовки заявление»iOS: ошибка базы данных Sqlite: завершение приложения из-за неотображенного исключения «NSInternalInconsistencyException», причина: «команда подготовки ошибки»
Я бегу таймер каждые 10 секунд для Выбор строк из БД и Вставка строк в БД после события кнопки ,
Мой фрагмент кода, как:
в viewWillAppear
:
int result2 = sqlite3_open([dbPath UTF8String], &database);
if (result2 != SQLITE_OK) {
NSLog(@"Failure in connecting to the database with result %d",result2);
}
else {
NSLog(@ "Succesfully opened connection to DB") ;
}
и viewWillDisappear
:
int result = sqlite3_close(database);
if (result != SQLITE_OK){
NSLog(@"Failure in closing connection to database. Result %d",result);
}
else {
NSLog(@"Successfully closed DB connection") ;
}
Для Inserting rows
:
NSString *queryInsert = [NSString stringWithFormat: @"insert into mail_snoozlist (msgBody,msgSubject, msgSender,msgTo,msgDate,snoozTime) values('%@','%@','%@','%@','%@','%@')",strBody,msgSub,msgFrom,msgTo,strMsgDate,stringFromDate];
NSLog(@"queryInsert:%@",queryInsert);
const char *sql = [queryInsert UTF8String];
if(sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) {
sqlite3_step(statement);
sqlite3_reset(statement);
} else {
NSAssert1(0,@"error preparing statement",sqlite3_errmsg(database));
return;
}
sqlite3_finalize(statement);
и Selecting rows
:
NSString *querySQL2 = [NSString stringWithFormat: @"Select * from mail_snoozlist WHERE snoozTime = '%@'",_snoozTime];
NSLog(@"querySql:%@",querySQL2);
if (sqlite3_prepare_v2(database, [querySQL2 UTF8String], -1, &statement, NULL) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
Message *obj = [[Message alloc] init];
NSString *msgBody=[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)];
obj.msgBody= msgBody;
NSString *msgSub=[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)];
obj.msgSub= msgSub;
NSString *msgSender=[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 3)];
obj.msgFrom= msgSender;
NSString *msgTo=[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 4)];
obj.msgTo= msgTo;
NSString *msgDate=[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 5)];
obj.msgDate= msgDate;
[listOfItems addObject:obj];
[self.tableView reloadData];
}
sqlite3_reset(statement);
sqlite3_finalize(statement);
Любой, пожалуйста, помогите мне решить эту проблему.
Спасибо!
для вызова этих строк // [self createEditableCopyOfDatabaseIfNeeded]; [self initializeDatabase]; – iAhmed
Спасибо за ваш ответ. мне пришлось решать эту проблему путем изменения битов в запросе: 'NSString * queryInsert = [NSString stringWithFormat: @" вставить в mail_snoozlist (msgBody, msgSubject, msgSender, msgTo, msgDate, Snooztime) значения ('% S', '% s', '% s', '% s', '% s', '% s') ", [strBody UTF8String], [msgObj.msgSub UTF8String], [msgObj.msgFrom UTF8String], [msgObj.msgTo UTF8String], [strMsgDate UTF8String], [stringFromDate UTF8String]]; ' – Pankaj