我一直在努力使这项工作太久了.我刚开始接触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.