C SQLite3:更新无法正常工作?

C SQLite3:更新无法正常工作?,c,sqlite,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 va

我正在尝试使用以下代码从我的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列没有更新,并且它们包含一个空值。我在导出要由shell使用的数据库后使用SQLite命令shell测试了这一点


那怎么了?如何解决这个问题?

您的参数顺序错误:

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]);
报告说:

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

您交换了第二个和第三个
sqlite3\u bind\u int
参数