FMDB SQLite 没有出现在我的设备中
Posted
技术标签:
【中文标题】FMDB SQLite 没有出现在我的设备中【英文标题】:FMDB SQLite doesn't show up in my device 【发布时间】:2012-07-31 19:21:42 【问题描述】:再一次,我需要别人的帮助。我正在按照以下教程使用 FMDB 包装器进行 SQLite 连接:
http://www.icodeblog.com/2011/11/04/simple-sqlite-database-interaction-using-fmdb/
在上面的教程中,一切(创建数据库和表,插入,删除)都是以编程方式完成的,但在模拟器中一切正常,但是当我使用 SQLite Manager 插件在数据库上进行任何插入时(以编程方式创建在 ios 中),它不会出现在我的测试设备中。我有什么遗漏(比如将文件复制到我的包中)吗?这真的让我发疯。我对这些完全陌生..有人可以帮我吗?
PS:我知道我可以使用 Core Data,但由于某些原因,我必须为这个应用程序使用 SQLite。任何帮助将不胜感激。
提前谢谢你。
【问题讨论】:
这很奇怪,因为没有关于如何做到这一点的技巧。如果它在模拟器上工作,它通常在设备上工作。您能否提供更多关于您如何知道它没有在设备上生成的信息,或者显示您打开数据库的代码等? 【参考方案1】:确保 (a) 将 db 包含在包中(请参阅 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];
如果您在模拟器中运行此程序,则可以继续检查模拟器的捆绑包和 Documents 文件夹(如果运行不正常),以确保一切都在应有的位置。您的模拟器文件夹类似于“~/Library/Application Support/iPhone Simulator/5.1/Applications/”(将 5.1 替换为您正在使用的模拟器的任何版本)。您可能需要通过在Terminal
命令行窗口中运行chflags nohidden ~/Library
来取消隐藏Library
文件夹(如果还没有)。无论如何,您可以使用 Mac OS X 的 sqlite3
命令打开模拟器的数据库,并确保您的表正常。
一个常见的错误是无法正确programmatically copy 数据库,因此open
方法将创建一个空白数据库,而executeQuery
将失败说找不到表。
告诉我你发现了什么。
【讨论】:
+1 非常感谢罗伯特!你说的对。问题仅在于将文件复制到 Documents 文件夹中。我使用了您在另一篇文章中提到的代码,一切正常!再次感谢您的帮助。一直以来,使用 SQLite 都是一次很棒的学习。希望我能给 +100 :) TY..以上是关于FMDB SQLite 没有出现在我的设备中的主要内容,如果未能解决你的问题,请参考以下文章