![](/img/trans.png)
[英]Error : undefined is not an object (evaluating 'db.transaction') in ReactNative
[英]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.