我正在尝试在我的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
数据库存在问题....任何想法我做错了什么?
答案 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文件夹(或缓存或临时文件夹或其他),然后再尝试打开它。