首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sqlite3_step返回SQLITE_CONSTRAINT

sqlite3_step返回SQLITE_CONSTRAINT
EN

Stack Overflow用户
提问于 2013-09-02 21:45:11
回答 1查看 4.9K关注 0票数 2

我的iOS应用程序中有一个本地iOS数据库。

通常一切都按需要工作,但有时当我尝试将一个新记录insert到我的表,调用sqlite3_step(statement)方法时,会收到一个奇怪的错误(sqlite3_step(statement))。在删除和重新创建表一次之后就会发生这种情况。(是的,我需要删除该表并重新创建,而不仅仅是删除本例中的所有记录)。

下面是我创建表的方法。

代码语言:javascript
运行
复制
CREATE TABLE MyTable (
reference text PRIMARY KEY not null collate nocase, 
value text not null collate nocase)

我的表没有任何创建的手动索引,只是自动生成唯一的索引"sqlite_autoindex_mytable_1"。正如我所读的(可创作),这是一个正常的情况。

以下是一些代码:

代码语言:javascript
运行
复制
sqlite3_stmt *statement;
int result = sqlite3_prepare_v2(database, [sqlString UTF8String], -1, &statement, NULL);
if (result == SQLITE_OK) {

   int sql_result = sqlite3_step(statement);
   // here is receive sql_result == SQLITE_CONSTRAINT (19)
}

这个问题肯定不是sql查询字符串中的问题。正如我所读到的,当我尝试用与已经存在的主键相同的主键插入一些记录时,我会收到这个错误。在我的例子中,我有一个空表并接收此错误。

那么问题是什么会导致SQLITE_CONSTRAINT错误的原因呢?唯一的索引是否可以在删除表后不被删除,并且仍然包含一些信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-03 01:40:59

您应该查看sqlite3_errmsg返回的错误消息,它将准确地告诉您哪个约束失败,以及插入失败的原因。它可能会报告

  • “列引用并不是唯一的”--当您试图插入的reference值已经存在于表中时,就会得到它;或
  • “值可能不是空值”--当您尝试将NULL插入定义为NOT NULL的列时,就会得到这个值。

这两个错误都将在SQLITE_CONSTRAINT的返回代码中返回。只有通过查看sqlite3_errmsg,才能有效地诊断问题的根源。

坦率地说,我假设前者是问题所在(您正在插入的reference已经存在于表中),但在您查看sqlite3_errmsg之前,我们只是猜测。

代码语言:javascript
运行
复制
int result;

if ((result = sqlite3_prepare_v2(database, [sql UTF8String], -1, &statement, NULL)) != SQLITE_OK) {
    NSLog(@"%s: sqlite3_prepare error: %s (%d)", __FUNCTION__, sqlite3_errmsg(database), result);
}

if ((result = sqlite3_step(statement)) != SQLITE_DONE) {
    NSLog(@"%s: step error: %s (%d)", __FUNCTION__, sqlite3_errmsg(database), result);
}
else
    NSLog(@"success");

sqlite3_finalize(statement);

看看sqlite3_errmsg,它就会准确地告诉你出了什么问题。然后,您可能需要检查要插入的值,并将其与表中已经存在的值以及定义的约束(NOT NULL)进行比较。

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

https://stackoverflow.com/questions/18581156

复制
相关文章

相似问题

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