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

PhoneGap - Read pre-packaged sqlite database

本文关键字:sqlite 数据库 读取 PhoneGap      更新时间:2023-09-26

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

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

我已经为 Android 开发了一段时间,解决方案是在 assets 文件夹中部署一个只读数据库文件,并在第一次运行时将数据库文件复制到另一个文件夹中,在那里我可以随心所欲地读/写。

所以我做了一些研究,意识到它应该与PhoneGap相同。将二进制 SQLite 数据库放在某个位置,以便在构建时,它将与应用程序一起打包。然后简单地使用我在这里链接的 SQLite 插件加载它。

最后,问题!我必须采取哪些确切步骤才能读取与应用程序一起打包的文件?

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

我知道这些问题可能非常基本,但我的无数次尝试都没有成功,我没有找到一个教程来深入解释这一点(相信我,我用谷歌搜索过)。此外,文档似乎不足。

仅使用 WebSQL 数据库并使用 INSERT s 的 s*** 负载加载数据数据库不是一个可行的选择,数据库有数千条记录。

提前感谢您的帮助,您将省去一两个头痛。

目前,Cordova的标准SQLite插件支持预填充数据库,它将从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 项目不再支持预填充的 db。

但是,此功能刚刚从同一创建者转移到另一个项目。现在,使用 Cordova-sqlite-ext 来实现此目的。