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

时间:2015-01-20 23:07:12

标签: javascript sqlite cordova cordova-plugins fileapi

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

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

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

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

最后,问题!为了能够读取随应用程序打包的文件,我必须采取哪些具体步骤?

  1. 我应该在哪里放置我的二进制文件以确保它被打包到应用程序中?
  2. 我应该如何初始化File API?我应该使用window.requestFileSystem要求持久存储吗?或者我应该使用cordova.file.applicationDirectory将某个(不确定哪个)目录(DirectoryEntry)作为window.resolveLocalFileSystemURL?如果是这样,我应该使用哪些EXACT参数?我主要是指这个:https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md
  3. 如何阅读打包文件?将window.resolveLocalFileSystemURL与正确的文件夹一起使用?那么参数应该是什么?
  4. 如果我达到这一点,文件复制应该可以正常工作。只需从只读cordova.file.applicationDirectory复制到cordova.file.dataDirectory即可读/写。正确?
  5. 我知道这些问题可能非常基本,但我无数的尝试都没有成功,我找不到深入解释这个问题的教程(相信我,我用Google搜索)。此外,文件似乎不够。

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

    感谢您提前获得帮助,您将为我节省一两个头痛。

1 个答案:

答案 0 :(得分:3)

目前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中排除,请在location: 2上添加openDatabase,这会将您的数据库放入Library/LocalDatabase

更新(2016)

原始的Cordova-sqlite-storage项目不再支持预先填充的数据库。

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