如何将 PreCreated 和 Pre Populated 完整的 sqlite database.db 文件复制到 iOS 应用程序中

Posted

技术标签:

【中文标题】如何将 PreCreated 和 Pre Populated 完整的 sqlite database.db 文件复制到 iOS 应用程序中【英文标题】:How to copy PreCreated and Pre Populated complete sqlite database.db file into iOS App 【发布时间】:2014-04-15 11:17:24 【问题描述】:

我也必须在离线模式下运行我的应用程序,所以这就是为什么尝试将 myDatabase.db 文件复制到应用程序的文档目录中。

我已经从终端创建了 myDatabase.db 并填充了它。它有近 10 个表,现在我想将它添加到我的应用程序中,

我已经尝试过了,但只是登录记录表是从整个数据库文件中复制的,而不是从任何其他表中复制的。就像我登录到我的应用程序一样,它从登录表中获取数据,并且不再显示表数据。甚至 NSLog for sqlite Error 都说 Error no such table: TableName ,这意味着没有其他表被复制。

**问题是如何复制完整的 myDatabase.db 文件?

这就是我复制文件所做的……

在我的 .m 文件中我添加了这个方法

- (void) copyDatabaseIfNeeded

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
dBPath = [self getDBPath];
BOOL success = [fileManager fileExistsAtPath:dBPath];
if(!success)
     
        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"myDatabase.db"];
        success = [fileManager copyItemAtPath:defaultDBPath toPath:dBPath error:&error];

    if (!success)
        NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    

- (NSString *) getDBPath

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSLog(@"dbpath : %@",documentsDir);
return [documentsDir stringByAppendingPathComponent:@"myDatabase.db"];

在我的 ViewDidLoad 方法中

[self copyDatabaseIfNeeded];
database = [dBPath UTF8String];

然后我登录并移动到下一个 ViewController,将 dBpath 带到新的 View。 我检查了所有的 ViewControllers dBPath 是好的,但不是应该显示的记录,

如果我将 dBPath 更改为我的计算机的文档目录(该数据库所在的位置),那么它可以完美运行......

现在请帮我解决这个问题。 任何帮助将不胜感激..

【问题讨论】:

【参考方案1】:

在将数据库复制到应用程序的文档目录后,尝试使用 SQLite 数据库浏览器检查表是否已创建以及数据是否已附加到表中。

要访问应用程序的文档目录,请在模拟器上运行应用程序并转到 库->应用程序支持->iPhone模拟器->(模拟器版本)->应用程序->搜索你的应用程序->文档目录->mydatabase.db

【讨论】:

图书馆在哪里-> 应用程序支持等等…….. 在任何地方都不好:( 在 finder... 转到 Go 菜单并按 Alt 按钮或尝试 /Users/(your_computer_username)/Library/ 打开 mydatabase.db 文件并检查表是否存在。您可能无法直接打开 .db 文件。尝试启动 SQLite 数据库浏览器,然后将 .db 文件拖放到它上面。 使用 Sqlite Professional(只读)检查数据库文件中是否有表和数据

以上是关于如何将 PreCreated 和 Pre Populated 完整的 sqlite database.db 文件复制到 iOS 应用程序中的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Spring Security @Pre 和 @Post 注释与集合一起使用

docker 基本操作Ⅱ(关于镜像操作)

Swift:如何将信息传递给弹出视图?

怎样让window open 出的画面只弹出一个,具体就是频繁点按钮时只popu出一个画面,而不是一堆画面。

如何获取 <pre> 标记的值并保留所有空格?

Django:如何使用 pre_save 信号更新模型实例?