2013-08-05 4 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

query: "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

'Ошибка при вставке данных. 'database locked' ' – 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

Пожалуйста, проверьте «mydbpath», поставив NSLog .Я думаю вы указали неверный путь.
Также попробуйте использовать:

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