ios - SQLStatement 被拒绝

标签 ios sqlite

我正在尝试通过此方法将用户注释插入到 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);
}

最佳答案

您需要使用 sqlite3_errmsg 记录错误。但问题很可能是查询中的逗号以及 where 子句。插入语句不应包含 where 子句。也许你的意思是使用更新:

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

此外,您对 sqlite3_bind_xxx 的调用需要有正确的索引。绑定(bind)索引从 1 开始并上升。您正在使用 8 然后 2。您想要 1 然后 2。

关于ios - SQLStatement 被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16350686/

相关文章:

javascript - 如何在网站的移动设备上录制音频?

iphone - 在 iPhone 中运行后台进程

ios - 将元数据应用于图像会导致 performChanges 请求失败

sql - GROUP BY子句中非法别名的解决方法

android - 如何在 TextView 中从数据库 SQLITE 中获取特定数据?

android - 从 SQLite 表中删除 1 个月前的记录

objective-c - iOS Controller 之间的通信

objective-c - iOS - 构建失败,CocoaPods 找不到头文件

android - 如何在没有 SQLiteOpenHelper 的情况下升级应用程序中的 SQLite 表

SQLite - 根据特定的计算总和过滤记录