Javascript Cordova和SQLite-返回为“未定义”的所有行项目
我正在netbeanside中使用Cordova框架构建一个Android应用程序。 我已经建立了一个只有几个表的小数据库,并且能够向表中插入数据,但是,我发现很难检索数据 每次查询数据库时,所有项目都返回为未定义。数据插入很好,因为每次我添加新行并调用以下命令时,行数都会增加:Javascript Cordova和SQLite-返回为“未定义”的所有行项目,javascript,sqlite,cordova,undefined,Javascript,Sqlite,Cordova,Undefined,我正在netbeanside中使用Cordova框架构建一个Android应用程序。 我已经建立了一个只有几个表的小数据库,并且能够向表中插入数据,但是,我发现很难检索数据 每次查询数据库时,所有项目都返回为未定义。数据插入很好,因为每次我添加新行并调用以下命令时,行数都会增加: var len = results.rows.length; alert(len); 这是我的密码: function readRecord(){ var db = window.openDatabase("
var len = results.rows.length;
alert(len);
这是我的密码:
function readRecord(){
var db = window.openDatabase("dbResults", "1.0", "Results DB", 1000000);
db.transaction(getRecord, errorCB);
}
function getRecord(tx){
try
{
tx.executeSql('SELECT [time], bglevel FROM RECORDS', [], recordSuccess, errorCB);
}
catch(err)
{
alert(err.message);
}
}
function recordSuccess(tx, results) {
var len = results.rows.length;
alert(len);
var res = '';
for (var i=0; i<len; i++){
try
{
alert("Row = " + i.toString() + " Time = " + results.rows.item(i).time);
alert("Row = " + i.toString() + " BG = " + results.rows.item(i).bglevel);
}
catch(err)
{
alert(err.message);
}
res = res + '(' + results.rows.item(i).time + '|' + results.rows.item(i).bglevel + '),';
alert(res);
}
}
任何帮助都将不胜感激您需要通过行,而不是项目,例如:
alertRow=+i.toString+Time=+results.rows[i].item.Time 在index.js中,将变量设置为var db; 这个db更像是一个全局变量,其值在整个应用程序中都保持不变 现在在onDeviceReady中初始化数据库
var db;
var app={
initialize: function() {
this.bindEvents();
},
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
document.addEventListener("pause", function(){ console.log("--- paused ---"); isAppPaused = true;}, false);
},
onDeviceReady: function() {
if(window.sqlitePlugin !== undefined) {
console.log('opening sqlite DB ');
db = window.sqlitePlugin.openDatabase("ECM_MOBILE");
} else {
console.log('opening Web SQL DB ');
db = window.openDatabase("ECM_MOBILE", "1.0", "Cordova Demo", 200000);
}
this.doSomething(db);
},
doSomething:function(db){
}
};
app.initialize();
下面是一个执行任何sql语句的示例,这里的数据库是您的数据库,sql是作为字符串和回调函数传递的sql语句
read: function(database, sql, callback){
this.callback = callback;
this.sql = sql;
database.transaction(
function(tx){
app.doRead(tx);
},
function(error){
app.onError(error);
}
);
},
onError: function(error){
console.log("error call back : " + JSON.stringify(error));
console.log(error);
},
onResult: function(tx, result){
console.log("result call back : " + result);
this.callback(null, result);
},
doRead: function(tx){
console.log("execute sql : " + this.sql);
tx.executeSql(this.sql , [],
function(tx, result){
app.onResult(tx, result);
},
function(error){
app.onError(error);
}
);
}
希望有帮助,您需要相应地集成它以检查解决方案,
也可以尝试JSON.Stringifyresult;在返回的结果上,单击console.log
希望有帮助。我想你不想使用I.toString,因为它会将I转换为字符串,这可能会破坏一些东西。我尝试过这个方法,但没有任何区别。我只是循环的计数器。谢谢你的建议though@MaryPoppins我也面临同样的问题?你找到解决办法了吗?
read: function(database, sql, callback){
this.callback = callback;
this.sql = sql;
database.transaction(
function(tx){
app.doRead(tx);
},
function(error){
app.onError(error);
}
);
},
onError: function(error){
console.log("error call back : " + JSON.stringify(error));
console.log(error);
},
onResult: function(tx, result){
console.log("result call back : " + result);
this.callback(null, result);
},
doRead: function(tx){
console.log("execute sql : " + this.sql);
tx.executeSql(this.sql , [],
function(tx, result){
app.onResult(tx, result);
},
function(error){
app.onError(error);
}
);
}