SQLite数据库无法正常工作

时间:2015-01-28 20:23:57

标签: objective-c sqlite

我正在尝试在我的iOS应用程序中保存SQLite数据库中的一些数据。我是用以下方法做的:

NSString *query = [NSString stringWithFormat:@"INSERT INTO categories VALUES ('%@', '%@', '%@', null, %d)", categoryName, @"test", @"test", 33];

NSLog(@"Query is: %@", query);

[[AFSQLManager sharedManager]performQuery:query withBlock:^(NSArray *row, NSError *error, BOOL finished) {

    if (!error) {

        if (!finished) {
            NSLog(@"No success");
        } else {
            NSLog(@"Succeeded");
        }
     } else {

         UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Oops" message:error.description delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
                    [alertView show];
     }
}];

这是打开数据库的方法,该方法在viewDidLoad

中执行
[[AFSQLManager sharedManager]openLocalDatabaseWithName:@"test.sqlite" andStatusBlock:^(BOOL success, NSError *error) {
    if (error) {
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Oops" message:error.description delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];
    }
}];

如您所见,我正在使用AFSQLManager来执行查询(您可以在https://github.com/AlvaroFranco/AFSQLManager找到它)。上面的方法记录'成功',但是当我从数据库中提取一些数据时,我得不到任何结果。我最好的猜测是SQLite数据库存在问题....任何想法我做错了什么?

1 个答案:

答案 0 :(得分:0)

你引用的那个类在它的打开例程中有一个相当基本的问题,即它从包中打开数据库:

-(void)openLocalDatabaseWithName:(NSString *)name andStatusBlock:(statusBlock)status {

    NSString *path = [[NSBundle mainBundle]pathForResource:[[name lastPathComponent]stringByDeletingPathExtension] ofType:[name pathExtension]];

    if (sqlite3_open([path UTF8String], &_database) != SQLITE_OK) {
        NSLog(@"Failed to open database!");
        status(NO, nil);
    } else {
        NSLog(@"Database opened properly");
        status(YES, nil);
    }
}

捆绑包是只读的。因此,任何更新该数据库中数据的尝试都将失败。

如果要更新数据库,则必须先将数据库复制到(或创建数据)Documents文件夹(或缓存或临时文件夹或其他),然后再尝试打开它。