我正在尝试更新我的sqlite数据库,但此代码对我不起作用。 请帮我找出这个问题。
-(BOOL)StoreFavourite:(NSString*)fav :(int)DuaId
{
NSString* mydbpath=[self pathfinder];
const char *dbpath=[mydbpath UTF8String];
if(sqlite3_open(dbpath,&database )==SQLITE_OK)
{
NSString *query = [NSString stringWithFormat:@"UPDATE Dua SET
favourite=\'%@\' WHERE dua_id=%d ",fav,DuaId];
const char *query_statement=[query UTF8String];
if(sqlite3_prepare_v2(database, query_statement, -1, &statement, NULL)==SQLITE_OK)
{
while(sqlite3_step(statement) == SQLITE_DONE)
{
return YES;
}
sqlite3_finalize(statement);
}
}
return YES;
}
答案 0 :(得分:2)
请通过NSLog
检查您的“mydbpath”。我认为您提供了错误的路径。
也尝试使用:
NSString *query = [NSString stringWithFormat:@"UPDATE Dua SET favourite='%@' WHERE dua_id=%d ",fav,DuaId];
答案 1 :(得分:0)
这里有一些原因因为sqlite3_prepare_v2!= SQLITE_OK:
1.该表可能不会出现在数据库中。
2.查询语句错误。
3.查询语句中的列名错误。
您可以通过在else中添加以下内容来使用错误语句找到确切的问题:
NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database))
答案 2 :(得分:0)
请尝试以下方式
-(BOOL)StoreFavourite:(NSString*)fav :(int)DuaId
{
sqlite3_stmt *statement=nil;
NSString *mydbpath=[self pathfinder];
NSString *query;
if(sqlite3_open([mydbpath UTF8String],&database) == SQLITE_OK)
{
query = [NSString stringWithFormat: @"update Dua set favourite=? where dua_id=?"];
if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL)
== SQLITE_OK)
{
sqlite3_bind_int(statement, 2, DuaId);
sqlite3_bind_text(statement, 1, [fav UTF8String], -1, SQLITE_TRANSIENT);
if(sqlite3_step(statement))
{
return YES;
}
else
{
return NO;
}
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return NO;
}