![](/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.