2013-12-11 22 views
0

我正在使用PhoneGap Open Database API。根據這一文件數值應使用如下代碼PhoneGap存儲,將變量傳遞給db.transaction,SQL Lite

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未定義。有誰知道如何做到這一點?

回答

0

我認爲唯一可以做到這一點的方法是編寫一個函數,該函數返回一個函數,該函數使用傳入的值。沿線的東西:

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)作爲第一個參數。

0

如果別人還在尋找一個解決這個問題,我有一個傳遞變量不改變或丟失的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 
}