C SQLite3:更新无法正常工作?
我正在尝试使用以下代码从我的C程序更新SQLite数据库中的4列: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
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
参数