0

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

4

3 回答 3

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/"];

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

于 2012-08-20T14:48:32.473 回答
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];
}
于 2012-08-20T20:31:24.170 回答
0

以下内容来自一篇博客文章——但在我引用它之前,我因为发布链接而受到了轻微的打击。不过,我会在最后发布 URL,我建议您去那里获取完整的解释和一些后续评论。这种帮助归功于 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) 使用“databases”代替 app_database 3c) 您可能希望从 /assets 中删除该文件,因为它是重复的且不再需要。我的应用程序是它需要的大小的两倍。

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

4a) 第 176 行,我编辑了 1==1 以便始终执行 if 语句。第 179 行我更改了 this.setStorage(appPackage, false); 到 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

于 2012-08-20T01:26:04.650 回答