我喜歡讓事情變得很簡單,所以我使用的功能數量有限,在可以接收參數的PhoneGap應用程序中處理存儲時。很多我看到的例子都調用了許多子函數,對於我來說,調試時這是一場噩夢。
我被Web SQL遇到了一些問題,但是閱讀規範確實有助於澄清我可以做什麼和不可以做什麼。 (http://www.w3.org/TR/webdatabase/)
看看這個簡單的代碼插入函數:
function dbInsert(param1, param2, dbObj) {
val1 = param1;
val2 = param2;
val3 = String(dbObj.item2);
var sqlTxt = "INSERT INTO demo (geo1, geo2, geo3) VALUES (?, ?, ?)";
db.transaction(function(tx) {tx.executeSql(sqlTxt,[val1,val2,val3])}, errorCB, successCB);
}
就讓我們通過它走。很明顯,一個接收參數的標準函數可以是任何東西,在這種情況下也是一個對象以及一個字符串。
sqlTxt是樂趣開始的地方。按照通常寫入插入語句的方式寫入,但通常在VALUES中使用?要將數據傳遞到數據庫表中的每個字段的佔位符。
現在,讓我們打破了下一行:
db.transaction(function(tx) {tx.executeSql(sqlTxt,[val1,val2,val3])}, errorCB, successCB);
當您創建一個新的數據庫,db是處理程序的數據庫對象,以便db.transaction要求對數據庫DB執行事務。
如果我們這樣寫下一個下一節,您可以看到它的函數調用tx.executeSql,並且因爲它在執行db.transaction方法時會通過db句柄。
function(tx) {
tx.executeSql(sqlTxt,[val1,val2,val3])
}
現在如果我們解析SQLTXT它可能看起來像這樣
INSERT INTO demo (geo1, geo2, geo3) VALUES ('a', 'b', 'c');
因爲我們傳遞三個變量來代替的?持有人,它看起來像上面的行。最後你調用錯誤和成功回調函數。
在你的情況我會創造一個queryDB功能是這樣的:
function queryDB(id) {
var sqlTxt = "SELECT * FROM DEMO WHERE id=?"
db.transaction(function(tx) {tx.executeSql(sqlTxt,[id])}, errorCB, successCB);
}
從本質上講,功能抓起參數ID,它傳遞到查詢的[ID]和執行,並返回錯誤或成功。顯然你可以擴展這個以使用多個參數,或者如果你想要非常聰明,你只需創建一個單一的數據庫事務函數,並傳入sql和參數以用作對象或數組(本例中將在我的博客上)
所以確實在queryDB()函數我會得到價值與tx.id的ID? *我正在使用phonegap – cjmling 2012-01-08 07:18:11
就像我說的那樣,這取決於phonegap的API(我沒有使用它)。是'tx'你想傳遞給queryDB的值嗎?或者您期望API填寫的方法(如事務ID)。如果你想傳遞它,你可以使用上面詳述的方法。 – JohnP 2012-01-08 07:30:02
'tx'可能是一個方法,API會填補我的猜測,http://dev.w3.org/html5/webdatabase/#sqltransactioncallback ....所以如果我想傳遞它,那麼我如何檢索值ID ..是由tx.id嗎? – cjmling 2012-01-08 08:59:37