【问题标题】:SQLITE basic syntaxSQLITE 基本语法
【发布时间】:2010-06-14 23:37:00
【问题描述】:

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

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);”

谢谢, 多里酒吧

【问题讨论】:

    标签: c sqlite


    【解决方案1】:

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

    所以你的查询:

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

    只给blobtest赋值,省略了不能为null的strtestinttest

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

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

    (或者如果你希望他们成为NULL-able,你可以去掉NOT NULL

    【讨论】:

    • 非常感谢! (我想您实际上的意思是将 strtest 设置为 'boo' 但 blobtest 和 inttest 没有保留 NULL 或默认值,对吧?
    • @Doori Bar - 不,blobtest 是架构中声明的第一列,因此values(...) 中的第一个值将应用于该列,除非您指定明确的列顺序,例如: insert into test (inttest, strtest, blobtest) values(...)
    • 但我做到了? “插入测试(strtest)值('boo');”
    猜你喜欢
    • 2015-03-30
    • 2012-03-28
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多