javascript-PhoneGap-读取预打包的sqlite数据库

我一直在努力使这项工作太久了.我刚开始接触PhoneGap / Cordova.我运行了演示应用程序,安装了所有官方插件,并添加了此SQLite插件以开始使用:https://github.com/brodysoft/Cordova-SQLitePlugin

但是,我希望插件读取预先打包的数据库.简而言之,创建一个可以脱机工作并且在首次运行时无需下载SQLite数据库的应用程序.

我已经为Android开发了一段时间,解决方案是在Assets文件夹中部署一个只读数据库文件,并在第一次运行时将数据库文件复制到另一个文件夹中,我可以在其中随意读取/写入.

因此,我做了一些研究,意识到与PhoneGap应该相同.将二进制SQLite数据库放置在某处,以便在构建时将其与应用程序打包在一起.然后只需使用我在此处链接的SQLite插件加载它即可.

最后,问题!为了能够读取与应用程序打包在一起的文件,我必须采取什么确切步骤?

>我应将二进制文件放在哪里以确保将其打包到应用程序中?
>我应该如何初始化File API?我应该使用window.requestFileSystem请求持久存储吗?还是应该使用window.resolveLocalFileSystemURL获得一些(不确定哪个)目录(cordova.file.applicationDirectory)作为DirectoryEntry?如果是这样,我应该使用哪些EXACT参数?我主要指的是:https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md
>如何读取打包的文件?在正确的文件夹中使用window.resolveLocalFileSystemURL吗?那么参数应该是什么?
>如果达到这一点,文件复制应该可以正常进行.只需将只读的cordova.file.applicationDirectory复制到可读写的cordova.file.dataDirectory.对?

我知道这些问题可能是很基本的,但是我无数次尝试都没有成功,而且我没有找到深入解释这一问题的教程(相信我,我用Google搜索).此外,文档似乎不足.

仅使用WebSQL数据库并使用大量INSERT加载数据库数据是不可行的选择,该数据库具有数千条记录.

感谢您的提前帮助,您将为我省去一两次头痛.

解决方法:

当前,Cordova的标准SQLite插件支持Pre-populated Databases,它将从www复制数据库文件并将其放在正确的目录中.它还支持Android和iOS,因此您无需为不同的平台使用不同的逻辑.

打开数据库时,可以指定使用createFromLocation:1预先填充该数据库,如下所示:

var db = window.sqlitePlugin.openDatabase({
    name: "my.db",
    createFromLocation: 1
});

对于iOS,它将首先检查www,如果文件存在,它将复制到Documents.请记住,它将由iCloud备份.如果要从iCloud中排除它,请在openDatabase上也添加位置:2,这会将数据库放在Library / LocalDatabase中.

更新(2016)

原始的Cordova-sqlite-storage项目不再支持预填充的db.

但是,此功能刚刚从同一创建者移至另一个项目.现在,为此使用Cordova-sqlite-ext.

上一篇:hoj3152-Dice 等比数列求和取模


下一篇:android-无法使用Fovea购买插件从Google Play商店检索产品