gpt4 book ai didi

sqlite - 在cordova中使用现有的sqlite数据库

转载 作者:行者123 更新时间:2023-12-02 03:20:41 24 4
gpt4 key购买 nike

您好,我正在使用 ionic 框架和 cordova 创建一个应用程序,并希望使用 sqlite 数据库来存储数据。

那么我如何使用现有的 sqlite 数据库来实现此目的?我必须在哪里保存数据库,以便 cordova 可以找到它并在针对平台进行编译时使用它?

编辑:

如果我尝试以推荐方式打开数据库,则会收到以下错误:

[Error] TypeError: undefined is not an object (evaluating 'n.sqlitePlugin.openDatabase')
openDB (ng-cordova.min.js, line 9)
(anonyme Funktion) (app.js, line 19)
(anonyme Funktion) (ionic.bundle.js, line 44243)
onPlatformReady (ionic.bundle.js, line 2396)
onWindowLoad (ionic.bundle.js, line 2375)

这是我的index.html 的头部部分:

<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title></title>

<link href="lib/ionic/css/ionic.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">

<!-- ionic/angularjs js -->
<script src="lib/ionic/js/ionic.bundle.js"></script>


<!-- cordova sqlite extenseion -->
<script src="js/ng-cordova.min.js"></script>

<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>


<!-- your app's js -->
<script src="js/app.js"></script>
<script src="js/controllers.js"></script>
</head>

我的 app.js 看起来像这样:

//Database variable
var db = null;

angular.module('starter', ['ionic', 'starter.controllers', 'ngCordova'])

.run(function($ionicPlatform, $cordovaSQLite) {
$ionicPlatform.ready(function() {

// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if (window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if (window.StatusBar) {
// org.apache.cordova.statusbar required
StatusBar.styleDefault();
}

db = $cordovaSQLite.openDB({ name: "db.spareParts" });

var query = "SELECT cars.name FROM cars";
$cordovaSQLite.execute(db, query).then(function(res) {
if(res.rows.length > 0) {
console.log("SELECTED -> " + res.rows.item(0).name);
} else {
console.log("No results found");
}
}, function (err) {
console.error(err);
});


});
})

数据库db.spareParts存储在www根目录下,是一个sqlite3数据库。

最佳答案

经过很长时间的痛苦,我解决了这个问题:)

预填充的数据库必须位于应用程序的“dataDirectory”中

首先需要检查该目录中是否存在db文件,如果不存在,则必须从应用程序目录(即/www文件夹)中复制它

检查这段代码

$ionicPlatform.ready(function() {
src = cordova.file.dataDirectory + 'data.sqlite';

window.resolveLocalFileSystemURL(src, function () {
db = sqlitePlugin.openDatabase('data.sqlite');
}, function () {
$scope.copyDb('data.sqlite');
});

$scope.copyDb = function (dbName) {

var sourceFileName = cordova.file.applicationDirectory + 'www/' + dbName;
var targetDirName = cordova.file.dataDirectory;

return Promise.all([
new Promise(function (resolve, reject) {
resolveLocalFileSystemURL(sourceFileName, resolve, reject);
}),
new Promise(function (resolve, reject) {
resolveLocalFileSystemURL(targetDirName, resolve, reject);
})
]).then(function (files) {
var sourceFile = files[0];
var targetDir = files[1];
return new Promise(function (resolve, reject) {
targetDir.getFile(dbName, {}, resolve, reject);
}).then(function () {
console.log("file already copied");
}).catch(function () {
console.log("file doesn't exist, copying it");
return new Promise(function (resolve, reject) {
sourceFile.copyTo(targetDir, dbName, resolve, reject);
}).then(function () {
console.log("database file copied");
db = sqlitePlugin.openDatabase('data.sqlite');
});
});
});
};

检查此链接

prepopulated db demo

关于sqlite - 在cordova中使用现有的sqlite数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28669396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com