Cordova / Ionic预填充SQLite数据库问题

时间:2015-08-30 15:59:11

标签: angularjs sqlite cordova ionic cordova-plugins

所以我有一个Ionic应用程序,我希望使用预先填充的SQLite数据库进行部署(尝试手动填充它,但它的速度很慢)。所以我决定使用Cordova-sqlite-storage插件(https://github.com/litehelpers/Cordova-sqlite-storage)。我有一个转储文件女巫打开很好没有错误,但当我尝试取任何东西时我得不到任何结果。无论如何,这是我的代码:

在app.js中:

app.run(function($ionicPlatform) {
    $ionicPlatform.ready(function() {
        db = window.sqlitePlugin.openDatabase({name: "mydb", createFromLocation: 1});
    });
})

在controllers.js

.controller("HomeController", function($scope,Test){
    $scope.test = function(){
        Test.getAlchohol().then(function(res){
            console.log(res.length);
        });
    };
})

我的数据库提取服务:

.factory('Test', function($cordovaSQLite){
    var arr = [];
    return{
        getAlchohol:function(){
            var query = "SELECT * FROM Alchohol";
            return $cordovaSQLite.execute(db, query, []).then(function(res){
                arr = res.rows;
                return arr;
            }, function(err){
                console.error(err);
            });
        }
    }
})

我的转储文件是这样的:

PRAGMA synchronous = OFF;
PRAGMA journal_mode = MEMORY;
BEGIN TRANSACTION;
CREATE TABLE "Alchohol" (
  "id" int(11) NOT NULL ,
  "intoxication" int(11) NOT NULL,
  "text_id_1" int(11) NOT NULL,
  "text_id_2" int(11) NOT NULL,
  "text_id_3" int(11) NOT NULL,
  PRIMARY KEY ("id")
);
INSERT INTO "Alchohol" VALUES (1,0,20,21,22);
INSERT INTO "Alchohol" VALUES (2,1,18,19,22);
INSERT INTO "Alchohol" VALUES (3,2,23,24,25);
INSERT INTO "Alchohol" VALUES (4,3,26,24,25);
INSERT INTO "Alchohol" VALUES (5,4,27,28,25);
INSERT INTO "Alchohol" VALUES (6,5,29,30,25);
INSERT INTO "Alchohol" VALUES (7,6,29,31,32);
INSERT INTO "Alchohol" VALUES (8,7,33,31,34);
INSERT INTO "Alchohol" VALUES (9,8,35,31,36);
INSERT INTO "Alchohol" VALUES (10,9,33,31,37);
END TRANSACTION;

我已经尝试过我在网上找到的所有可能的解决方案,但对我来说没有任何效果。任何帮助将不胜感激..

4 个答案:

答案 0 :(得分:0)

非常确定@Joerg是正确的,您需要使用SQLite DB file使用Cordova-sqlite-storage插件预先填充数据库,而不是SQL转储。

您可以使用this plugin导入SQL转储。

答案 1 :(得分:0)

请在此处查看我的回答:Open prepopulated SQLite dtabase in Cordova (for android) and Visual Studio

基本上,您使用的插件(https://github.com/litehelpers/Cordova-sqlite-storage)不适用于预先填充的数据库。

但是,这个有效:https://www.npmjs.com/package/cordova-plugin-sqlite

答案 2 :(得分:0)

基本上不使用cordova-plugin-sqlite(已弃用)或cordova-sqlite-storage,只需使用cordova-sqlite-ext即可。

在此处查看我的完整答案:https://stackoverflow.com/a/36478499/976948

答案 3 :(得分:0)

做一些改变 1.从app.run()中删除数据库连接。将该代码放入工厂服务

    dbConnection :function(){
                if (window.cordova) {
                dbconn = $cordovaSQLite.openDB({ name: "my.db" , location: 'default'}); 
          $cordovaSQLite.execute(dbconn, "CREATE TABLE IF NOT EXISTS Contacts(Id INTEGER PRIMARY KEY NOT NULL, Name TEXT NOT NULL UNIQUE, Email TEXT NOT NULL UNIQUE, Phone INTEGER NOT NULL UNIQUE,Website   TEXT,Address TEXT,Notes TEXT,Softdelete INTEGER default 0)");
            }
           else{
           dbconn = window.openDatabase("my.db", '1', 'my', 1024 * 1024 * 100);
            $cordovaSQLite.execute(dbconn, "CREATE TABLE IF NOT EXISTS Contacts(Id INTEGER PRIMARY KEY NOT NULL, Name TEXT NOT NULL UNIQUE,Email TEXT NOT NULL UNIQUE, Phone INTEGER NOT NULL UNIQUE,Website TEXT,Address TEXT,Notes TEXT,Softdelete INTEGER default 0)");
                                    }
           return dbconn;
        }
  1. 在设备就绪时调用getAlchohol()函数。

    document.addEventListener("deviceready", onDeviceReady, false);
    function onDeviceReady() {
        Test.getAlchohol().then(function(res){
                console.log(res.length);
            });
    }
    
相关问题