我似乎误解了一个基本语法,为什么这个示例有效:
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 酒吧
最佳答案
所有三列都声明为 NOT NULL
,并且它们没有默认值。
所以你的查询:
insert into test(strtest) values('boo');
只为 blobtest
赋值,遗漏 strtest
和 inttest
不能为空。
您可以通过再添加两个值来解决此问题,或者您可以将表架构更改为默认值,例如:
create table test (
blobtest BLOB(4) NOT NULL,
strtest VARCHAR NOT NULL DEFAULT '',
inttest INTEGER NOT NULL DEFAULT 0
);
(或者如果您希望它们是NULL
-able,您可以去掉NOT NULL
)
关于c - SQLITE 基本语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3038542/