PhoneGap存储,将变量传递给db.transaction,SQLite

时间:2013-12-11 01:54:51

标签: ios sqlite cordova opendatabase

我正在使用PhoneGap Open Database 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未定义。有谁知道怎么做?

2 个答案:

答案 0 :(得分: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)作为第一个参数传递。

答案 1 :(得分: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
}