Cordova Sqlite插件插入具有空值的条目

时间:2016-06-03 16:58:14

标签: javascript sqlite ionic-framework ngcordova

我正在Ionic项目中实现Cordova Sqlite plugin,到目前为止,我已经能够创建数据库和表格,并根据ngCordova implementation提供的功能进行查询。

我注意到有一个insertCollection函数可用,我试图测试,我将一个数组传递给它,即使插入已经生成,条目也是为null。

这是我的示例表定义:

CREATE TABLE IF NOT EXISTS people (id integer primary key, firstname text, lastname text)

我填充了这样的数组:

for(var i = 0; i < 250000; i++){
  var index = i + 1;
  firstname = firstname + ' ' + index;
  var entry = {
    'firstname' : firstname,
    'lastname' : lastname
  };
  $scope.insertArray.push(entry);
}

然后像这样插入:

$cordovaSQLite.insertCollection($rootScope.db, $scope.insertQuery, $scope.insertArray).then(function(res) {
  console.log(res);
}, function (err) {
  console.error(err);
});

insertQuery如下:

INSERT INTO people (firstname, lastname) VALUES (?,?)

我做了一个像这样的选择:

  $scope.select = function() {
    $scope.results = [];
    var query = "SELECT firstname, lastname FROM people";
    $cordovaSQLite.execute($rootScope.db, query).then(function(res) {
      if(res.rows.length > 0) {
        console.log('select was successful ' + res.rows.length + ' entries');

        for(var i = 0; i < $scope.maxItemsToShow; i++){
          $scope.results.push(res.rows.item(i));
        }

      } else {
        console.log("No results found");
      }
    }, function (err) {
      console.error(err);
    });
  }

我尝试在ion-list上显示结果,但是对于所有项目,firstname和lastname中的值都为null。

是什么导致了这个问题?

1 个答案:

答案 0 :(得分:1)

函数insertCollection需要一个数组数组,而不是一个记录数组。内部数组必须包含要按照问号(作为值的占位符)出现在sql语句中的顺序插入的值。

所以你需要写:

for(var i = 0; i < 250000; i++){
  var index = i + 1;
  firstname = firstname + ' ' + index;
  var entry = [firstname, lastname];
  $scope.insertArray.push(entry);
}