如果成功,SQLite中的insert语句会返回什么?
我一直认为它应该是SQLITE_DONE,但最近在我的日志中发现了以下字符串:
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吗?
谢谢。
发布于 2009-06-27 15:26:16
SQLITE_DONE
http://www.sqlite.org/c3ref/step.html
您还可以尝试打印出错误代码,以找出问题所在。
发布于 2009-06-27 16:59:14
在这种情况下,我喜欢查看代码示例。这里有一些很好的例子:
http://sqlite.phxsoftware.com/forums/p/76/6659.aspx
SQLite Result Codes Reference会将SQLITE_OK列为表示成功的结果。它也是第一个错误代码,错误代码为0,这使其成为规范结果(即我期望的成功操作的结果)。
您应该在代码中放置断点或打印语句,以确定它是否真的返回零,并检查您的数据以确保您获得了预期的结果。如果这些都通过了,我会改变你的条件来检查SQLITE_OK。
sqlite3_step()接口行为的详细信息取决于该语句是使用较新的"v2“接口sqlite3_prepare_v2()和sqlite3_prepare16_v2()准备的,还是使用较旧的旧接口sqlite3_prepare()和sqlite3_prepare16().准备的
在传统接口中,返回值将是SQLITE_BUSY, SQLITE_DONE, SQLITE_ROW, SQLITE_ERROR或SQLITE_MISUSE。使用"v2“接口,可能还会返回任何其他结果代码或扩展结果代码。
发布于 2011-08-19 05:19:58
从"Debug“配置切换到"Release”为我解决了这个问题。
https://stackoverflow.com/questions/1053020
复制相似问题