2012-01-26 81 views
3

我在帶有Phonegap的SQLite中有一個名爲Demo的表。我已經插入了幾個值。現在我想更新一條記錄。SQLite更新查詢在Phonegap中不起作用

var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000); 

db.transaction(updatemonthSaveingDB, errorCB); 

function updatemonthSaveingDB(tx) 
{ 
    tx.executeSql("UPDATE DEMO SET data = " + submitval + " WHERE id = " + 8, [], updateCB, errorCB); 
} 

function errorCB(err) 
{ 
    alert("Error processing SQL: " + err.code); 
} 

現在,當我拋出這個查詢,它顯示* 錯誤處理SQL:0 *警報。

回答

0

我相信發生的事情是您的交易實際上是成功的。如果你看看這個SQLite錯誤代碼表(http://www.sqlite.org/c3ref/c_abort.html),你會看到一條錯誤消息「0」讀作「/ *成功的結果*/」。

如果「updateCB」實際上不是一個函數(這裏沒有定義它),那麼errorCB可能被讀爲成功回調並被調用爲結果嗎?

6

的問題是通過一個SQLite查詢中變量的方法是不正確 在此功能

function updatemonthSaveingDB(tx) 
{ 
tx.executeSql("UPDATE DEMO SET data = " + submitval + " WHERE id = " + 8, [], updateCB, errorCB); 
} 

sqlite的考慮「UPDATE DEMO SET數據=」作爲查詢條件,因爲你使用了「不正確。 的正確的方法是:

 function updatemonthSaveingDB(tx) 
{ 
    tx.executeSql("UPDATE DEMO SET data ='" +submitval+"' WHERE id = '"+8+"' ;", [], updateCB, errorCB); 
} 
+0

它爲什麼要工作?如果你能解釋,你的答案會好得多。 – Ben

+0

爲什麼不使用參數化查詢? tx.executeSql(「UPDATE DEMO SET data =?WHERE id =?」,[submitval,8],updateCB,errorCB); –

0

給報價'' beetween每個列的值

我人所以刪除[], updateCB, errorCB);。如果您不聲明updateCBerrorCB函數,它將不起作用。

我更新了代碼。爲我工作。

function updatemonthSaveingDB(tx) 
{ 
    tx.executeSql("UPDATE DEMO SET data='" + submitval + "' WHERE id='8'"); 
}