Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Cordova和SQLite-返回为“未定义”的所有行项目_Javascript_Sqlite_Cordova_Undefined - Fatal编程技术网

Javascript Cordova和SQLite-返回为“未定义”的所有行项目

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("

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

每次查询数据库时,所有项目都返回为未定义。数据插入很好,因为每次我添加新行并调用以下命令时,行数都会增加:

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