我想问下面我的功能。 当我调用此函数时,它打印不可用。 你能帮帮我吗?
static sqlite3 *database = nil;
static sqlite3_stmt *statement = nil;
- (BOOL) findNews:(NSString *)caption{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSLog(@"CAPTION ID : %@", caption);
NSString *querySQL = [NSString stringWithFormat:@"SELECT * FROM dbase WHERE CONTENT_ID = \"%@\"", caption];
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(database, query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
return YES;
}
else{
return NO;
}
sqlite3_reset(statement);
}else{
NSLog(@"NOT AVAILABLE");
}
}
return nil;
}
答案 0 :(得分:7)
有一些原因导致sqlite3_prepare_v2!= SQLITE_OK:
该表可能不会出现在数据库中。
查询语句错误。
查询语句中的列名错误。
您可以通过在else中添加以下内容来使用错误语句找到确切的问题:
NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database))
答案 1 :(得分:1)
sqlite3 open。 “如果文件名是空字符串,则将创建一个私有的临时磁盘数据库。一旦数据库连接关闭,该私有数据库将自动删除。”
因此,如果数据库未复制到Documents目录中,则sqlite3_open将返回SQLITE_OK。您应该将数据复制到Bundle中并将此数据库复制到Documents目录。
-(void) checkAndCreateDatabase{
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
success = [fileManager fileExistsAtPath:databasePath];
if(success) return;
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"mydb.sqlite"];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
}