科尔多瓦& SQLite - 所有返回为'undefined'的行项

时间:2014-04-24 23:48:35

标签: javascript sqlite cordova undefined

我正在使用Netbeans IDE中的Cordova框架构建Android应用程序。 我已经构建了一个只有几个表的小型数据库,并且能够将数据插入到表中,但是,我发现很难检索数据。

每次查询数据库时,所有项都将返回为undefined。数据插入正常,因为每次添加新行时行数都会增加并调用它:

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);
    }     
}

当我运行此时,最终警报只有以下文字:

(undefined,undefined),
(undefined,undefined),
(undefined,undefined),
(undefined,undefined),

非常感谢任何帮助

2 个答案:

答案 0 :(得分:-1)

你需要传递行,而不是项目,例如:

alert(“Row =”+ i.toString()+“Time =”+ results.rows [i] .item.time);

答案 1 :(得分:-1)

在index.js中创建一个变量var 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语句的例子,这里的数据库是你的db,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.Stringify(result);结果返回并console.log()

希望它有所帮助。