我尝试使用以下代码从我的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使用的数据库。
那有什么不对?以及如何解决这个问题?
答案 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)