2013-08-05 99 views
0

我想更新我的sqlite数据库,但此代码不适合我。 请帮我找出这有什么问题。sqlite不更新我的数据库iOS

-(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

你有没有检查你的数据库路径是否正确? –

+0

查询:“UPDATE Dua SET favorite = \”%@ \“WHERE dua_id =%d” –

回答

0

这里有一些原因是由于该sqlite3_prepare_v2 = SQLITE_OK:

1,表可能不存在到数据库中。

2.错误的查询语句。

3.错误的列名到查询语句中。

您可以通过将以下的其他使用错误的语句找到确切的问题:

NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database)) 
+0

“插入数据时出错。 '数据库被锁定'' – user2552769

+0

我想你会忘记关闭数据库。 sqlite3_close(数据库); –

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; 
} 
2

试图通过把NSLog。我想请检查您的“mydbpath”你给出了不正确的路径。
也试图使用:

NSString *query = [NSString stringWithFormat:@"UPDATE Dua SET favourite='%@' WHERE dua_id=%d ",fav,DuaId];