2010-06-30 3 views
0

J'ai un énorme problème avec ma base de données sqlite3 sur l'iphone sdk 4. Je ne peux écrire/lire la base de données qu'une seule fois! Avec l'iphone sdk 3.2, tout fonctionnait bien. Après le premier essai, j'obtiens l'erreur "SQLITE_BUSY".Problème étrange avec une base de données sqlite3 (Ne peut écrire qu'une fois)

Voici un extrait de mon code i utiliser:

-(void) addFavoriteOdv:(Odv*)odv name:(NSString*)name; 
{ 
    @synchronized(self) 
    { 
     if(name == nil) 
      name = odv.name; 

     NSString* rowId = [self addOdv:odv]; 

     int existing = [self numberOfFavoriteOdvs:rowId]; 
     if(existing == 0) 
     { 
      sqlite3 *database = [self getOpenDatabase]; 

      const char *insertStatement = [@"insert into favoriteodvs(odv, name) values (?, ?)" UTF8String]; 

      int retCode = 0; 
      sqlite3_stmt *statement; 
      retCode = sqlite3_prepare_v2(database, insertStatement, -1, &statement, NULL); 

      if(retCode == SQLITE_OK) 
      { 
       sqlite3_bind_text(statement, 1, [rowId UTF8String], -1, SQLITE_TRANSIENT); 
       sqlite3_bind_text(statement, 2, [name UTF8String], -1, SQLITE_TRANSIENT); 

       if(sqlite3_step(statement)!= SQLITE_DONE) 
       { 
        NSLog(@"SQL Error: %s", sqlite3_errmsg(database)); 
        NSLog(@"Inserting FavoriteOdv failed"); 
       } 
      } 

      sqlite3_finalize(statement); 
      sqlite3_close(database); 
     } 
    } 
} 

Quelqu'un at-il une idée? J'utilise le libsqlite3.dylib.

Merci, Sebastian

Répondre

0

réutiliser votre déclaration préparée - vous devez appeler

sqlite3_reset(statement); 

juste après que vous avez reçu "SQLITE_DONE" de sqlite3_step. Après cela, vous pouvez lier une autre donnée et réexécuter votre requête.

p.s. mal:

const char *insertStatement = [@"insert into favoriteodvs(odv, name) values (?, ?)" UTF8String]; 

correct:

const char *insertStatement = "insert into favoriteodvs(odv, name) values (?, ?)"; 
+0

Merci !!! Mais je reçois un avertissement lorsque je supprime le [@ "" UTF8String] ... –

+0

Pourriez-vous coller un message d'avertissement dans le commentaire. –

+0

"initialisation à partir d'un type de pointeur incompatible" –

Questions connexes