如果成功,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吗?
感谢。
答案 0 :(得分:8)
答案 1 :(得分:3)
在这些情况下,我喜欢看代码示例。这里有一些好的:
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()
还是较旧的旧接口{{1}准备的}和sqlite3_prepare()
在旧版界面中,返回值为sqlite3_prepare16().
或SQLITE_BUSY, SQLITE_DONE, SQLITE_ROW, SQLITE_ERROR
。使用“v2”接口,也可以返回任何其他结果代码或扩展结果代码。
答案 2 :(得分:1)
从“调试”配置切换到“发布”为我解决了这个问题。