iphone FMDB 找不到表
Posted
技术标签:
【中文标题】iphone FMDB 找不到表【英文标题】:iphone FMDB can't find table 【发布时间】:2009-05-11 14:20:14 【问题描述】:- init
if(![super init]) return nil;
//the database is stored in the application bundle.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingFormat:@"/base.sqlite"];
NSLog(@"%@",path);
db = [FMDatabase databaseWithPath:path];
[db setLogsErrors:YES];
if (![db open])
NSLog(@"Could not open db.");
return 0;
else
NSLog(@"DB Open....");
FMResultSet *rs = [db executeQuery:@"SELECT * FROM settings"];
return self;
这是我用来尝试从设置中访问数据的代码。 但这会产生错误(我可以向您保证,有一个设置表!)
这是来自终端的转储
BEGIN TRANSACTION;
CREATE TABLE About (id integer PRIMARY KEY AUTOINCREMENT,key varchar UNIQUE,value text);
DELETE FROM sqlite_sequence;
CREATE TABLE settings (version integer,updated timestamp,owner varchar);
INSERT INTO "settings" VALUES(1,'2009-05-11 14:29:07','boulevart');
COMMIT;
和错误:
2009-05-11 16:14:19.799 SummerGuide[9892:20b] /Users/andyjacobs/Library/Application Support/iPhone Simulator/User/Applications/762630F5-78CB-41A4-85C2-964316ACFE1D/Documents/base.sqlite
2009-05-11 16:14:19.801 SummerGuide[9892:20b] DB Open....
2009-05-11 16:14:19.804 SummerGuide[9892:20b] DB Error: 1 "no such table: settings"
2009-05-11 16:14:19.804 SummerGuide[9892:20b] DB Query: SELECT * FROM settings
奇怪的是,如果我将路径更改为例如 /baseeeeeee.sqlite(不是没有文件),它仍然显示“DB Open....”
我刚刚将一个现有的 sqlite 文件 (base.sqlite) 添加到我的资源文件夹中,并将 sqlite3 库添加到我的框架中。
【问题讨论】:
【参考方案1】:要在应用程序包中获取文件的路径,请使用以下命令:
[[NSBundle mainBundle] pathForResource:@"base" ofType:@"sqlite"];
要真正打开数据库,您可能必须先将其复制到 Documents 目录,因为尝试修改 app bundle 中的文件是个坏消息。
【讨论】:
如果要插入或更新一些记录,是否必须将其复制到文档目录中? 是的。原因是您的应用程序的代码签名与应用程序包中所有内容的安全散列相关联。如果您修改捆绑包中的某些内容,您将使该代码签名无效;这会(我想,没有明确尝试过)使您的应用无法启动,因为代码签名现在将无效。以上是关于iphone FMDB 找不到表的主要内容,如果未能解决你的问题,请参考以下文章