2013-08-05 152 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];