所以我试图在我的离子应用程序中使用预先填充的数据库。
我正在使用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);
});
}
})
任何帮助非常赞赏。谢谢。
答案 0 :(得分:0)
发现了这个问题。在努力让它运行的同时,我下载了许多sqlite插件(例如sqlite2和sqlite-ext)。其中一个与基本的sqlite插件有某种冲突。我只是删除了所有sqlite插件,只安装了
https://github.com/litehelpers/Cordova-sqlite-storage
现在它正在运作。