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 回答