离子 + 预填充数据库
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 安装预填充的数据库
我一直在尝试让我的 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 安装预填充的数据库