簡體   English   中英

PhoneGap存儲,將變量傳遞給db.transaction,SQL Lite

[英]PhoneGap storage, Passing Variables to db.transaction, SQL Lite

我正在使用PhoneGap開放數據庫API。 根據此文檔,應使用以下代碼將值插入現有表中

function populateDB(tx) {
     tx.executeSql('DROP TABLE IF EXISTS DEMO');
     tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
     tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
     tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
}

function errorCB(tx, err) {
    alert("Error processing SQL: "+err);
}

function successCB() {
    alert("success!");
}

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

這工作正常,但現在我正嘗試將變量傳遞給populateDB函數。 當我嘗試下面的代碼

  var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
  db.transaction(populateDB("test variable"), errorCB, successCB);

“測試變量”字符串通過,但未定義tx。 有誰知道如何做到這一點?

我認為您可以執行此操作的唯一方法是編寫一個函數,該函數返回一個使用傳入值的函數。 類似於以下內容:

function makeMyDB(x) {
    var result = function() {
     tx.executeSql('DROP TABLE IF EXISTS DEMO');
     tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
     tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "'+x+'")');
    }
   return result;
} 

然后,您可以嘗試將makeMyDB(x)作為第一個參數傳遞。

如果其他任何人仍在尋找解決此問題的方法,那么我有一點辦法可以通過傳遞變量而不更改或丟失tx ,您只需編寫以下示例:

var myvar = 1; //an int or something else
db.transaction(function(tx){
    selectQueryDB(tx,myvar);
    },errorCB);



function selectQueryDB(tx,myvar){
    tx.executeSql('SELECT * FROM mytable WHERE myparam='+myvar, [], renderList, errorCB);

}

function errorCB(err){
    alert("Error Processing SQL: "+ err.code );
}
function renderList(tx,results){
enter code here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM