0

このメソッドを使用して sqliteDB にユーザー ノートを挿入しようとしていますが、何らかの理由でこのifステートメントを渡していません...

if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK){}

よくわかりませんが、SQLStatement が拒否されているか、何らかの理由があると思います。

(void) insertQuickNoteInDataBase:(NSString *)name :(NSString *)note{
sqlite3 * database;

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
    const char *sqlStatement = "insert into detail(QuickNote) values (?), where name = ?";
    sqlite3_stmt *compiledStatement;
    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {

        sqlite3_bind_text(compiledStatement, 8, [note UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(compiledStatement, 2, [name UTF8String], -1, SQLITE_TRANSIENT);

        if(SQLITE_DONE != sqlite3_step(compiledStatement))
            NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
    }
    sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
}
4

1 に答える 1

2

を使用してエラーをログに記録する必要がありますsqlite3_errmsg。しかし、問題はおそらくクエリ内のカンマとwhere句です。挿入ステートメントにはwhere句を含めないでください。おそらく、更新を使用するつもりです:

"UPDATE detail SET QuickNote = ? WHERE name = ?"

また、呼び出しにsqlite3_bind_xxxは適切なインデックスが必要です。バインド インデックスは 1 から始まります。8 の次に 2 を使用しています。1 の次に 2 が必要です。

于 2013-05-03T02:49:42.860 に答える