同样,我需要别人的帮助。我正在按照以下教程了解与FMDB包装器的SQLite连接:
http://www.icodeblog.com/2011/11/04/simple-sqlite-database-interaction-using-fmdb/
在上面的教程中,所有内容(创建数据库和表,插入,删除)都是以编程方式完成的,但是在模拟器中一切正常,但是当我使用SQLite Manager附加组件在数据库上进行任何插入时(以编程方式创建)在iOS)中,它不会出现在我的测试设备中。我身边有什么东西可以丢失(比如把文件复制到我的包里)吗?这真让我疯狂。我对这些都是全新的..有谁可以帮我这个?
PS:我知道我可以使用Core Data,但出于某些原因,我必须使用SQLite来使用这个应用程序。任何帮助将不胜感激。提前谢谢你。
答案 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>
让我知道你发现了什么。