2015-01-20 79 views
3

我一直在努力让这个工作太久。我刚开始进入PhoneGap/Cordova。我得到了演示应用程序的运行,安装了所有官方插件,并添加了这个SQLite插件开始工作:https://github.com/brodysoft/Cordova-SQLitePluginPhoneGap - 阅读预先打包的sqlite数据库

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

我一直在为Android开发相当长的一段时间,解决方案是在资产文件夹中部署一个只读数据库文件,并在第一次运行时将数据库文件复制到另一个文件夹中,在那里我可以读取/按我的意愿写。

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

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

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

我知道这些问题可能是非常基本的,但我无数的尝试都是失败的,我没有找到一个解释这个问题的教程(相信我,我用Google搜索了一下)。此外,文件似乎不足。

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

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

回答

3

目前科尔多瓦的标准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

UPDATE(2016)

原来的科尔多瓦 - sqlite的存储项目不支持预填充分贝了。

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

+0

截至2017年,情况仍然如此,Cordova-sqlite-storage不支持预填充数据库吗?你也知道在哪里把文件放入Ionic2应用程序? – 2017-01-02 19:45:04