2009-10-28 64 views
2

我有這個SQL語句在我的數據庫上運行,我確定它是正確的,但它沒有對數據庫進行任何更改。我該如何調試它?調試SQLite語句

查詢:

UPDATE task SET name=?, description=?, startDate=?, dueDate=?, complete=?, status=?, percentComplete=?, taskType=? WHERE rowId=:rowId 

我有條件地綁定在第8個參數取決於他們是否爲空。最後一個參數在所有情況下都綁定到當前rowId(我已經驗證了綁定它時rowId是正確的)。事情是這樣的:

int rowIdIdx = sqlite3_bind_parameter_index(stmt, ":rowId"); 
if (rowIdIdx > 0) { 
    sqlite3_bind_int(stmt,rowIdIdx,rowId); 
} 

我也覈實rowIdIdx結合ROWID時等於9。但是,當調用sqlite_step返回(總是SQLITE_DONE),該數據庫是永遠不會改變,sqlite3_changes(db)總是返回0

但是,如果我刪除WHERE子句,表中的每一行做得到更新,並sqlite3_changes(db)返回表中的行數。

這就是我之前使用過的更新語句工作得很好的框架。首先,是否有任何顯而易見的缺失,其次,我怎麼去嘗試調試呢?

編輯:

有點檢查後,如果我更換:ROWID只用另一正常?參數,它工作正常。但有一個原因,我使用命名參數,我不能這樣離開它。怎麼了!?

回答

0

是的,這是一個PEBKAC。