FMDB SQLite不会显示在我的设备中

时间:2012-07-31 19:21:43

标签: ios database ipad sqlite fmdb

同样,我需要别人的帮助。我正在按照以下教程了解与FMDB包装器的SQLite连接:

http://www.icodeblog.com/2011/11/04/simple-sqlite-database-interaction-using-fmdb/

在上面的教程中,所有内容(创建数据库和表,插入,删除)都是以编程方式完成的,但是在模拟器中一切正常,但是当我使用SQLite Manager附加组件在数据库上进行任何插入时(以编程方式创建)在iOS)中,它不会出现在我的测试设备中。我身边有什么东西可以丢失(比如把文件复制到我的包里)吗?这真让我疯狂。我对这些都是全新的..有谁可以帮我这个?

PS:我知道我可以使用Core Data,但出于某些原因,我必须使用SQLite来使用这个应用程序。任何帮助将不胜感激。

提前谢谢你。

1 个答案:

答案 0 :(得分:2)

确保(a)在数据包中包含数据库(有关可以找到“复制包资源”的位置的屏幕快照,请参阅here); (b)programmatically copy db从捆绑到文档。然后你可以从那里打开它。

为什么它适用于您的模拟器,而不是设备有点好奇。我只能想象你是从一些固定的路径读取,而不是以编程方式检索应用程序的Documents文件夹?

<强>更新

我建议您查看各种退货代码并确保一切正常。

我已经采用了您的代码示例并且(a)检查了FMDatabase的创建结果; (b)检查open的结果; (c)检查FMResultSet的结果,包括显示sqlite错误消息; (d)结束结果集:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSString *path = [docsPath stringByAppendingPathComponent:@"DADatabase.sqlite"];

FMDatabase *database = [FMDatabase databaseWithPath:path];
NSAssert(database, @"Unable to create FMDatabase object");

NSLog(@"%@", database);

BOOL success = [database open];
NSAssert(success, @"Unable to open database");

FMResultSet *results = [database executeQuery:@"SELECT * FROM DrugList"];
NSAssert(results, @"Unable to create result set: %@", [database lastErrorMessage]);

while([results next]) {
    NSString *name = [results stringForColumn:@"Drugname"];
    [arrayToLoadDiseases addObject:name];
}

[results close]; 

[database close];

如果你在你的模拟器中运行它,你可以继续检查模拟器的包和文件夹,如果事情不对,只是为了确保一切都在它应该的位置。您模拟器的文件夹类似于“〜/ Library / Application Support / iPhone Simulator / 5.1 / Applications /”(用你正在使用的任何版本的模拟器替换5.1)。您可能必须通过在Library命令行窗口中运行chflags nohidden ~/Library来取消隐藏Terminal文件夹(如果尚未取消)。无论如何,您可以使用Mac OS X的sqlite3命令打开模拟器的数据库,并确保您的表格正常。

常见错误是无法正确programmatically copy数据库,因此open方法将创建一个空白数据库,executeQuery将无法说明找不到该表。< / p>

让我知道你发现了什么。