PhoneGap - 读取预打包的sqlite数据库
PhoneGap - Read pre-packaged sqlite database
我一直在努力让它工作太久了。我刚开始接触 PhoneGap/Cordova。我得到了演示应用程序 运行ning,安装了所有官方插件,并添加了这个 SQLite 插件以开始工作:https://github.com/brodysoft/Cordova-SQLitePlugin
但是,我希望插件读取预打包的数据库。简单地说,创建一个离线工作的应用程序,并且在第一次 运行 时不需要下载 SQLite 数据库。
我已经为 Android 开发了一段时间,解决方案是在 assets 文件夹中部署一个只读数据库文件,然后先 运行 将数据库文件复制到一个不同的文件夹,我可以在其中 read/write 随心所欲。
所以我做了一点研究,意识到它应该与 PhoneGap 相同。在某处放置一个二进制 SQLite 数据库,以便在构建时将其与应用程序打包在一起。然后只需使用我在此处链接的 SQLite 插件加载它。
终于有问题了!我必须执行哪些具体步骤才能读取应用程序打包的文件?
- 我应该将我的二进制文件放在哪里以确保它被打包到应用程序中?
- 我应该如何初始化文件 API?我应该使用
window.requestFileSystem
请求持久存储吗?或者我应该使用 window.resolveLocalFileSystemURL
获取一些(不确定是哪个)目录 (cordova.file.applicationDirectory
) 作为 DirectoryEntry
?如果是这样,我应该使用哪些确切参数?我主要指的是这个:https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md
- 如何读取打包后的文件?使用
window.resolveLocalFileSystemURL
和正确的文件夹?那么参数应该是什么?
- 如果我做到这一点,文件复制应该可以正常进行。只需从只读的
cordova.file.applicationDirectory
复制到cordova.file.dataDirectory
,即read/write。对吧?
我知道这些问题可能很基础,但我无数次尝试都没有成功,而且我没有找到深入解释这个问题的教程(相信我,我用谷歌搜索过)。另外,文档似乎不够。
仅使用 WebSQL 数据库并使用 INSERT
s 的 *** 负载加载数据库不是一个可行的选择,数据库有数千条记录。
提前感谢你的帮助,你会让我头疼一两次。
目前 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
上也添加 location: 2
,这会将你的数据库放在 Library/LocalDatabase
.
中
更新 (2016)
原来的 Cordova-sqlite-storage 项目不再支持预填充数据库。
但是,此功能刚刚移至同一创建者的另一个项目。现在,为此目的使用 Cordova-sqlite-ext。
我一直在努力让它工作太久了。我刚开始接触 PhoneGap/Cordova。我得到了演示应用程序 运行ning,安装了所有官方插件,并添加了这个 SQLite 插件以开始工作:https://github.com/brodysoft/Cordova-SQLitePlugin
但是,我希望插件读取预打包的数据库。简单地说,创建一个离线工作的应用程序,并且在第一次 运行 时不需要下载 SQLite 数据库。
我已经为 Android 开发了一段时间,解决方案是在 assets 文件夹中部署一个只读数据库文件,然后先 运行 将数据库文件复制到一个不同的文件夹,我可以在其中 read/write 随心所欲。
所以我做了一点研究,意识到它应该与 PhoneGap 相同。在某处放置一个二进制 SQLite 数据库,以便在构建时将其与应用程序打包在一起。然后只需使用我在此处链接的 SQLite 插件加载它。
终于有问题了!我必须执行哪些具体步骤才能读取应用程序打包的文件?
- 我应该将我的二进制文件放在哪里以确保它被打包到应用程序中?
- 我应该如何初始化文件 API?我应该使用
window.requestFileSystem
请求持久存储吗?或者我应该使用window.resolveLocalFileSystemURL
获取一些(不确定是哪个)目录 (cordova.file.applicationDirectory
) 作为DirectoryEntry
?如果是这样,我应该使用哪些确切参数?我主要指的是这个:https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md - 如何读取打包后的文件?使用
window.resolveLocalFileSystemURL
和正确的文件夹?那么参数应该是什么? - 如果我做到这一点,文件复制应该可以正常进行。只需从只读的
cordova.file.applicationDirectory
复制到cordova.file.dataDirectory
,即read/write。对吧?
我知道这些问题可能很基础,但我无数次尝试都没有成功,而且我没有找到深入解释这个问题的教程(相信我,我用谷歌搜索过)。另外,文档似乎不够。
仅使用 WebSQL 数据库并使用 INSERT
s 的 *** 负载加载数据库不是一个可行的选择,数据库有数千条记录。
提前感谢你的帮助,你会让我头疼一两次。
目前 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
上也添加 location: 2
,这会将你的数据库放在 Library/LocalDatabase
.
更新 (2016)
原来的 Cordova-sqlite-storage 项目不再支持预填充数据库。
但是,此功能刚刚移至同一创建者的另一个项目。现在,为此目的使用 Cordova-sqlite-ext。