离子 + 预填充数据库

Ionic + PrepopulatedDB

我一直在尝试让我的 cordova 应用程序在具有预填充数据库(使用 SQLite 和 DbCopy)的设备上运行,但我在遵循教程时遇到了问题。当使用 ionic 运行 android, 运行 设备上的应用程序时,第一次运行完美,但是当我 运行 它第二次 db 为 null 并且在我删除数据库并重新开始之前它不会再次工作。

var db = null;

angular.module("alterApp", ["ionic", "ngCordova"])
.run(function ($ionicPlatform, $cordovaSQLite) {
    $ionicPlatform.ready(function(){

        if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        }
        if(window.StatusBar){
            StatusBar.styleDefault();
        }

        window.plugins.sqlDB.copy("prefilledDB.db", function() {
            db = $cordovaSQLite.openDB({ name: "prefilledDB.db"  });
        }, function(error) {
            db = $cordovaSQLite.openDB({ name: "prefilledDB.db" });
        });
    });
})

有什么想法吗?如果有另一种方法可以使用 Ionic 预填充数据库,那么我也可以使用它。

提前致谢,对不起我的英语。

我遇到了类似的问题,但最后我求助于 PouchDB。

您可以使用 PouchDB [http://pouchdb.com/],这可能会解决您的问题。

我用 SQLite 数据库解决了如下问题:

我把database_name.db放到了www文件夹里,然后我在controller里写了代码。 var dbName = "database_name.db"; var db = null;

var query = "SELECT * FROM table_name";

if (window.sqlitePlugin) { //device
    //Copy and open the database
    window.plugins.sqlDB.copy(dbName, 0, function () {
        db = window.sqlitePlugin.openDatabase({name: dbName, location: 1}, function (db)` {
            db.executeSql(query,[],function(result){
                  console.log(result.rows.length);
            },function(err){
                  console.log("Error:" + err.message);
            });
        }, function (err) {
             console.log('Error opening the database: ' + err.message);
        });
}, function (error) {
      console.error("Error copying the database: " + error.message);
      db = window.sqlitePlugin.openDatabase({name: dbName, location: 1}, function (db) {
db.executeSql(query,[],function(result){
      console.log(result.rows.length);
},function(err){
     console.log("Error:" + err.message);
);
}, function (err) {
    console.log('Error opening the database: ' + err.message);
});
});
} else{ //browser
db = window.openDatabase(dbName, 1, dbName, -1);
}

我在 Ionic 应用程序和 SQL lite 上取得了很好的成功,使用 "schema-version" 记录,每次修改模式时我都会递增一个数字。然后,我有一个对应于模式版本号的数据库 migration/sql 文件。这种模式非常适用于数据架构随时间变化的企业应用程序开发。

app 提供了该模式的优质示例。

我正在为我的项目使用插件 cordova-sqlite-ext,它工作正常。 以下是文档中的一些提示和注释:

预填充数据库

将数据库文件放在www目录下,打开数据库如下(database location和createFromLocation项都需要):

var db = window.sqlitePlugin.openDatabase({名称: "my.db", 位置: 'default', createFromLocation: 1});

重要说明:

将预先填充的数据库文件放在 www 子目录中。 (这应该适用于 Cordova CLI。) 预填充的数据库文件名必须与 openDatabase 中给定的文件名完全匹配。此插件不使用自动扩展。 如果您的数据库文件位置中已存在具有相同名称的数据库文件,则忽略预填充的数据库文件。 提示:如果您没有看到预填充数据库文件中的数据,请完全删除您的应用并重试!

替代方案:您还可以使用 an-rahulpandey / cordova-plugin-dbcopy 安装预填充的数据库

来源:https://github.com/litehelpers/cordova-sqlite-ext