Phonegap SQLite插件预先填充的数据库iOS

时间:2012-08-18 22:53:07

标签: ios sqlite cordova

我想用我的应用分发一个填充的数据库。我正在尝试实现SQLitePlugin,但正如页面所说,没有任何关于如何在iOS上执行此操作的文档。我试图实施这个outdated步骤,但没有任何运气。有没有人这样做过?

3 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,至少它对我有用,所以这里是:

我使用并按照您提到的链接中的教程:http://gauravstomar.blogspot.fr/2011/08/prepopulate-sqlite-in-phonegap.html

一定要复制并通过好的database.db和000 ... 001.db(好的一个在/ Caches和/ Caches / file_0文件夹中,或者在/ WebKit和/ WebKit / file__0中,我要'记得所以如果它不起作用的话,试试另一个)。然后我将它们粘贴在我的资源项目目录中。

我修改了两行:

NSString *masterPath = [libraryDir stringByAppendingPathComponent:@"WebKit/Databases/"];
NSString *databasePath = [libraryDir stringByAppendingPathComponent:@"WebKit/Databases/file__0/"];

通过以下几行:

NSString *masterPath = [libraryDir stringByAppendingPathComponent:@"Caches/"];
NSString *databasePath = [libraryDir stringByAppendingPathComponent:@"Caches/file__0/"];

从模拟器/设备中删除您的应用程序。然后运行..它的工作原理,我的数据库是预先填充的。

答案 1 :(得分:1)

我将数据库放在Resources文件夹中,并将此代码放在MainViewController.m

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:@"this.db"];

if ([fileManager fileExistsAtPath:databasePath] == NO) {
    NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"this" ofType:@"db"];
    [fileManager copyItemAtPath:resourcePath toPath:databasePath error:&error];
}

答案 2 :(得分:0)

以下内容来自一篇博客文章 - 但是在我要引用它之前,我已经略微打了个帖子。我会在最后发布网址,我建议你去那里寻求完整的解释和一些后续评论。这个帮助来自Scott Buckel。

1)使用此插件:https://github.com/chbrody/Cordova-SQLitePlugin/

2)将sqlite db文件复制到PhoneGap的/ assets文件夹中。

3)然后,按照此处的说明操作:http://gauravstomar.blogspot.com/2011/08/prepopulate-sqlite-in-phonegap.html将文件复制到本机存储。更改this.copy(“Databases.db”,“/ data / data /”+ pName +“/ app_database /”);

3a)使用您的数据库文件名而不是Databases.db。 3b)使用“数据库”而不是app_database 3c)您可能希望从/ assets中删除该文件,因为它是重复的并且不再需要。我的应用程序的大小是它需要的两倍。

4)(不确定这一步是否有必要,我今天离开办公室)。编辑SQLitePlugin.java

4a)第176行,我编辑了1 == 1,以便始终执行if语句。第179行我改变了这个.setStorage(appPackage,false); to this.setStorage(appPackage,true);

5)然后,您可以使用以下命令打开数据库并将其用作任何其他PhoneGap数据库

5a)var db = window.sqlitePlugin.openDatabase(“[full_database_name_including_extension]”,“1.0”,“PhoneGap Demo”,200000);

完整博文:http://www.raymondcamden.com/index.cfm/2012/7/27/Guest-Blog-Post-Shipping-a-populated-SQLite-DB-with-PhoneGap