0

アプリケーションに sqlite DB を使用していたので、2 つの同時クエリを呼び出す必要がありますが、次のようなエラーが発生しました:キャッチされていない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: 'ステートメントの準備中にエラーが発生しました'

ボタンイベント後にDBから行を選択し、DBに行を挿入するために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);

誰でもこの問題を解決するのを手伝ってください。

ありがとう!

4

2 に答える 2