【发布时间】:2012-06-28 06:58:57
【问题描述】:
这一定是一个愚蠢的问题,但我无法让我的查询工作。好像我的数据库是空的(我仔细检查过,不是)。它是一个简单的SELECT * FROM table 查询。我就是这样尝试的:
+(MyDatabase *)database{
if (database == nil) {
database = [[MyDatabase alloc] init];
}
return database;
}
- (id)init
{
self = [super init];
if (self) {
NSString *sqliteDb = [[NSBundle mainBundle] pathForResource:@"personsDB" ofType:@"sqlite3"];
if (sqlite3_open([sqliteDb UTF8String], &database) != SQLITE_OK) {
NSLog(@"Fail to open Database.");
}
}
return self;
}
和
-(NSArray *)getAllRows{
NSMutableArray *retArray = [[NSMutableArray alloc] init];
NSString *query = @"SELECT * FROM persons";
sqlite3_stmt *statement;
NSLog(@"checking SQLITE_OK?");
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
NSLog(@"SQLITE_OK");
while (sqlite3_step(statement) == SQLITE_ROW) {
int personID = sqlite3_column_int(statement, 0);
char *personChars = (char *) sqlite3_column_text(statement, 1);
int gender = sqlite3_column_int(statement, 2);
int related = sqlite3_column_int(statement, 3);
NSString *person = [[NSString alloc] initWithUTF8String:personChars];
MyDBInfo *info = [[MyDBInfo alloc] initWithpersonID:personID person:person gender:gender related:related ];
[retArray addObject:info];
}
sqlite3_finalize(statement);
}
return retArray;
}
我认为这是所有有趣的东西。
在我的日志中我得到checking SQLITE_OK?,但没有SQLITE_OK。我没有收到Fail to open Database.,所以我假设那里一切都很好。
我的数据库已满,并且有一个名为persons 的表。我对sqlite 中的iOS apps 非常陌生。
谢谢。
【问题讨论】:
-
是的,在
personsDB。 -
您确定 db 包含在您的捆绑包中吗?我有时会在我的 xcode 项目中添加文件,但它们不会自动包含在内。在项目导航器顶部选择目标,点击目标,在主面板中选择目标,选择“Build Phases”,看看你的db是否包含在“Copy Bundle Resources”中。
-
不用说,我相信你的代码很好(除了
sqlite3_open创建数据库和sqlite3_prepare_v2没有查看它的错误消息)。一定是没有 db,如果你sqlite3_open_v2([sqliteDb UTF8String], &database, SQLITE_OPEN_READWRITE, NULL);或者当你的sqlite3_prepare_v2失败时查看sqlite3_errmsg(database)就会发现它(它可能会说“找不到表”)。
标签: objective-c ios xcode sqlite