Ionic预填充数据库Sqlite

时间:2017-02-24 14:36:14

标签: android sqlite cordova plugins ionic-framework

所以我试图在我的离子应用程序中使用预先填充的数据库。

我正在使用Cordova-sqlite-storage用于sqlite和cordova-plugin-dbcopy将数据库复制到手机的内部存储中,但它无效。

(或似乎)工作的内容:

  • window.plugins.sqlDB.copy("Test.db", 0, pass, fail) 第一次返回pass函数,第二次返回失败(由于它已经存在)
  • db = window.sqlitePlugin.openDatabase({name: "Test.db"});我知道有效,因为以下查询有效:(下一个子弹)

  • $cordovaSQLite.execute(db, "SELECT * FROM sqlite_master WHERE type='table'")有效,但只返回表android_metadata而不是我的测试表names(我确定,它位于 Test.db 文件)

什么是正在运作

  • 如上所述,我只从我的查询中获取起始表,而不是应该存在的起始表

  • 结果,$cordovaSQLite.execute(db, "INSERT into names VALUES(2, 'hello')")给了我Error: no such table: names (code1):, while...

也许我没有在正确的位置使用Test.db文件。我把它放在 www 文件夹中,平台> android>资产文件夹和 www>没有运气的js 文件夹(现在全部都在这里)。

这是我的代码:

"use strict";

angular.module('starter').controller('AboutController', function(
  $scope,
  $cordovaSQLite
) {


  $scope.$on('$ionicView.beforeEnter', function() {
    var db = null;

    if (window.sqlitePlugin) {

      // copy the database
      window.plugins.sqlDB.copy("Test.db", 0,

        function() {
          // copy success, if not yet been copied
          console.log("Copy Success");
          db = window.sqlitePlugin.openDatabase({
            name: "Test.db"
          });

          execute(db)
        },
        function(err) {
          // copy error, if it has already been copied

          db = window.sqlitePlugin.openDatabase({
            name: "Test.db"
          });
          console.log("Copy Fail: " + JSON.stringify(err));

          execute(db)
        })
    }
  });


  function execute(db) {
    $scope.dbData += "in execute;  ";


    $cordovaSQLite.execute(db, "INSERT into names VALUES(2, 'hello')")
      .then(function(res) {
          console.log("sql1: " + res.rows.length);
        },
        function(err) {
          console.log("sql1: " + err);
        });


    $cordovaSQLite.execute(db, "SELECT * FROM sqlite_master WHERE type='table'")
      .then(function(res) {

          for (var i = 0; i < res.rows.length; i++)
            console.log(res.rows.item(i).name);
        },
        function(err) {
          //$scope.showAlert("failed2?", err);
          console.log("sql2: " + err);

        });
  }




})

任何帮助非常赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

发现了这个问题。在努力让它运行的同时,我下载了许多sqlite插件(例如sqlite2和sqlite-ext)。其中一个与基本的sqlite插件有某种冲突。我只是删除了所有sqlite插件,只安装了

https://github.com/litehelpers/Cordova-sqlite-storage

现在它正在运作。