首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite中的"insert“返回SQLITE_OK还是SQLITE_DONE?

SQLite中的"insert“返回SQLITE_OK还是SQLITE_DONE?
EN

Stack Overflow用户
提问于 2009-06-27 15:20:34
回答 3查看 10K关注 0票数 3

如果成功,SQLite中的insert语句会返回什么?

我一直认为它应该是SQLITE_DONE,但最近在我的日志中发现了以下字符串:

代码语言:javascript
复制
sqlite3_step error: 'not an error'

下面是记录上述字符串的代码:

代码语言:javascript
复制
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吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-27 15:26:16

SQLITE_DONE

http://www.sqlite.org/c3ref/step.html

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

票数 8
EN

Stack Overflow用户

发布于 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_ERRORSQLITE_MISUSE。使用"v2“接口,可能还会返回任何其他结果代码或扩展结果代码。

票数 3
EN

Stack Overflow用户

发布于 2011-08-19 05:19:58

从"Debug“配置切换到"Release”为我解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1053020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档