SQLITE基本语法

时间:2010-06-14 15:34:12

标签: c sqlite

我似乎误解了一个基本语法,为什么这个示例有效:

sqlite3_prepare_v2(db, "insert into test values('boo','boo',0);", strlen(querystring)+1 , &stmt, NULL);

if ((rc = sqlite3_step(stmt)) != SQLITE_DONE)
  fprintf(stderr, "Error: sqlite3_step() %d. Error Message %s;\n",rc,sqlite3_errmsg(db));

但是当我尝试这个查询时: “插入测试(strtest)值('boo');”

我收到错误: 错误:sqlite3_step()19。错误消息约束失败;

我错过了什么?

表测试是:“创建表测试(blobtest BLOB(4)NOT NULL,strtest VARCHAR NOT NULL,inttest INTEGER NOT NULL);”

谢谢, Doori Bar

1 个答案:

答案 0 :(得分:4)

所有三列都声明为NOT NULL,并且没有默认值。

所以你的查询:

insert into test(strtest) values('boo');

仅为blobtest分配一个值,省略strtestinttest不能为空。

您可以通过添加另外两个值来解决此问题,也可以将表架构更改为默认值,例如:

create table test (
    blobtest BLOB(4) NOT NULL,
    strtest VARCHAR NOT NULL DEFAULT '',
    inttest INTEGER NOT NULL DEFAULT 0
);

(或者,如果您希望NOT NULL能够NULL,则可以取出{{1}}