从SQLite中选择数据

时间:2013-10-23 08:47:20

标签: ios iphone sqlite fmdb

这是我的代码,错误也可见:

enter image description here

在Mozzila Firefox的SQLite Manager中 - 所有查询都正常工作,这意味着数据库是正确的

也许有人可以告诉我我的代码有什么问题?

编辑:

我的代码:

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

FMDatabase *db = [FMDatabase databaseWithPath:path];
//[db open];
if ([db open]==true)
{
    FMResultSet *resultsFavorite = [db executeQuery:@"SELECT count(*) from favorites"];
    while ([resultsFavorite next])
    {
        Pasaka *pasaka = [[Pasaka alloc]init];
        pasaka.title = [resultsFavorite stringForColumn:@"story_name"];
        pasaka.image = [resultsFavorite stringForColumn:@"image_path"];
        pasaka.movie = [resultsFavorite stringForColumn:@"video_path"];
        [favoriteMovieList addObject:pasaka];
    }

}

编辑2:

当我执行此查询时:

FMResultSet *results = [db executeQuery:@"SELECT count(*) FROM sqlite_master"];

它没有显示任何错误。

4 个答案:

答案 0 :(得分:0)

重置 iOS模拟器,或者如果您正在设备删除应用上进行测试,

清理项目并再次运行..

答案 1 :(得分:0)

只需转到dbpath中的文档即可。好像你的桌子不在那里。只需从设备或模拟器中删除您的应用程序,然后手动将数据库复制到dbpath或使用NSFileManager复制它并再次运行您的代码。

答案 2 :(得分:0)

您需要先将数据库复制到文档文件夹中(还要检查您的sqlite文件是否已在项目设置的Build Phase中的Copy Bundle Resources中正确添加):

//Where your original database file is
bundleDatabasePath = [[NSBundle mainBundle] pathForResource:@"stories_db" ofType:@"sqlite"];
//Where you will copy it in order to be used
documentDatabasePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingString:@"/stories_db.sqlite"];

//Using the default file manager
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;

//Copy empty database into document folder
if (![fileManager copyItemAtPath:bundleDatabasePath toPath:databasePath error:&error]) {
    //Error
    NSLog(@"Could not copy the database into document folder. Error:%@", error);
}

//Use DB
FMDatabase *db = [FMDatabase databaseWithPath:databasePath];

答案 3 :(得分:0)

找到解决方案。将我的数据库文件移到项目之上...... O.o并且它有效...