【问题标题】:Sqlite3 insert error C++Sqlite3插入错误C++
【发布时间】:2018-07-17 00:00:19
【问题描述】:

我正在插入到 sqlite3 表 Company 中,我使用以下模式创建表

sql = "CREATE TABLE COMPANY("  \
         "NAME TEXT PRIMARY KEY     NOT NULL,"
         "ADDRESS           TEXT    NOT NULL;";

我可以创建表,但是当我使用以下命令使用 sqlite3_bind_text 插入时,我遇到了以下问题

const char* sql = "INSERT INTO COMPANY(NAME, ADDRESS) VALUES (?, ?)"
sqlite3_stmt *stmt;
int rc = sqlite3_exec(db, sql, callback, &stmt, &zErrMsg);
if(rc == SQLITE_OK ) {
    sqlite3_bind_text(stmt, 1, "abc", 3, 0);
    sqlite3_bind_text(stmt, 2, "def", 3, 0);
    // commit
    sqlite3_step(stmt) ;
    sqlite3_finalize(stmt) ;
}

我收到错误,例如, SQL 错误:COMPANY.NAME 不能为 NULL

当列不为空时,sqlite3绑定文本不起作用吗?

【问题讨论】:

  • 也许我很困惑,我之前从未使用过bind_text,但是为什么不简单地使用sqlite3_exec呢?对我来说,我只需调用两次 sqlite3_exec 并插入值,但我可能只是误解了您要做什么。
  • slqite3_exec 是完美的,如果我需要添加更多值,例如 10 左右,我只想操作 const char *。

标签: c++ sqlite


【解决方案1】:
const char* sql = "INSERT INTO COMPANY(NAME, ADDRESS) VALUES (?, ?)"
sqlite3_stmt *stmt;
char *pszTest ;
int rc = sqlite3_prepare(db, sql, strlen(sql), &stmt, &pszTest) ;
if(rc == SQLITE_OK ) {
    sqlite3_bind_text(stmt, 1, "abc", 3, 0);
    sqlite3_bind_text(stmt, 2, "def", 3, 0);
    // commit
    sqlite3_step(stmt) ;
    sqlite3_finalize(stmt) ;
}

【讨论】:

  • 谢谢,我忘记在我的问题中添加 setp 并完成。但是,我在代码中有这个,我仍然得到同样的错误。
  • 您是否将 exec api 更改为 sqlite3_prepare ?
  • 是的,我没用。但是,不知何故,它与您的答案有效。非常感谢。
猜你喜欢
  • 2015-07-18
  • 2014-05-17
  • 2013-07-17
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
相关资源
最近更新 更多