2014-05-16 123 views
0

我嘗試使用下面的代碼從我的C程序中的SQLite數據庫上更新4列:SQLite3:更新無法正常工作?

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。

有什麼不對?以及如何解決這個問題?

回答

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]); 
+0

好吧,它現在有效。非常感謝。 – user3457200

1

documentation說:

第二個參數是SQL參數的指標來進行設置。

您交換了第二個和第三個參數sqlite3_bind_int