SQLite3:更新无法正常工作?

时间:2014-05-16 14:01:57

标签: c sqlite

我尝试使用以下代码从我的C程序更新SQLite数据库上的4列:

const char* update = {
    "UPDATE mytable SET "
    "mycolumn1"
    "=?,"
    "mycolumn2"
    "=?,"
    "mycolumn3"
    "=?,"
    "mycolumn4"
    "=? WHERE(id=1);"
};
extern sqlite3 *sqdb;
sqlite3_stmt *stmt;
int val[2]={1, 2};
sqlite3_prepare_v2(sqdb, update, -1, &stmt, 0);
sqlite3_bind_int(stmt, val[0], 1);
sqlite3_bind_text16(stmt, 2, L"example1", -1, SQLITE_STATIC);
sqlite3_bind_text16(stmt, 3, L"example2", -1, SQLITE_STATIC);
sqlite3_bind_int(stmt, val[1], 4);
sqlite3_step(stmt);
sqlite3_finalize(stmt);

更新成功,但只有2个文本列(第2列和第3列)更新,其他2个int列未更新,它们包含空值,我在导出后使用SQLite命令shell进行了测试shell使用的数据库。

那有什么不对?以及如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您的参数顺序错误:

sqlite3_bind_int(stmt, val[0], 1);
sqlite3_bind_int(stmt, val[1], 4);

第二个参数是索引,第三个参数是值。由于这两者都是int类型,因此没有编译时错误。

更改为:

sqlite3_bind_int(stmt, 1, val[0]);
sqlite3_bind_int(stmt, 4, val[1]);

答案 1 :(得分:1)

documentation说:

  

第二个参数是要设置的SQL参数的索引。

您交换了第二个和第三个sqlite3_bind_int参数。