是不是;插入“;在SQLite中返回SQLite\u OK或SQLite\u DONE?

是不是;插入“;在SQLite中返回SQLite\u OK或SQLite\u DONE?,sqlite,Sqlite,如果成功,SQLite中的语句“insert”返回什么 我一直认为应该由SQLITE_完成,但最近在日志中我发现了以下字符串: sqlite3_step error: 'not an error' 下面是记录上述字符串的代码: prepareStatement(addTranslationStmt2, "INSERT INTO translations(lang1_wordid, lang2_wordid) VALUES(?, ?)"); if (!addTranslationStmt2) r

如果成功,SQLite中的语句“insert”返回什么

我一直认为应该由SQLITE_完成,但最近在日志中我发现了以下字符串:

sqlite3_step error: 'not an error'
下面是记录上述字符串的代码:

prepareStatement(addTranslationStmt2, "INSERT INTO translations(lang1_wordid, lang2_wordid) VALUES(?, ?)");
if (!addTranslationStmt2) return -2;

sqlite3_bind_int(addTranslationStmt2, 1, word_id);
sqlite3_bind_int(addTranslationStmt2, 2, translation_id);

if(sqlite3_step(addTranslationStmt2) != SQLITE_DONE)
{
    NSLog(@"sqlite3_step error: '%s'", sqlite3_errmsg(database));
    sqlite3_reset(addTranslationStmt2);
    return -1;
}

sqlite3_reset(addTranslationStmt2);
我想知道,为什么它在大多数情况下都有效。 我是否应该将代码中的SQLITE_DONE更改为SQLITE_OK

谢谢。

SQLITE\u完成


您也可以尝试打印错误代码以找出问题所在。

在这种情况下,我喜欢查看代码示例。以下是一些好的例子:

列表中的SQLITE_OK表示结果成功。它也是第一个错误代码,错误代码为0,使其成为规范结果(即,成功操作的预期结果)

您应该在代码中放一个断点或print语句,以确定它是否真的返回零,并检查数据以确保得到预期的结果。如果所有这些都被检查出来,我会将您的条件更改为检查SQLITE_OK

sqlite3\u-step()
接口行为的详细信息取决于语句是使用较新的“v2”接口
sqlite3\u-prepare\u-v2()
sqlite3\u-prepare16\u-v2()
还是使用较旧的传统接口
sqlite3\u-prepare()
sqlite3\u-prepare16()。


在旧版界面中,返回值将是
SQLITE\u BUSY、SQLITE\u DONE、SQLITE\u ROW、SQLITE\u ERROR
,或
SQLITE\u mission
。使用“v2”接口,还可能返回任何其他结果代码或扩展结果代码。

从“调试”配置切换到“发布”解决了我的问题。

打印错误代码时,您看到了什么?检查