如何将 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 注释与集合一起使用