0

我正在使用 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 未定义。有谁知道如何做到这一点?

4

2 回答 2

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) 作为第一个参数传递。

于 2013-12-11T02:51:28.563 回答
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
}
于 2014-04-23T12:57:56.240 回答