2012-07-18 4 views
0

Je ne suis pas en mesure de faire une mise à jour, mais les insertions et les sélections fonctionnent correctement.Problème de mise à jour avec sqliteManager

Note:

1) J'utilise l'emballage de: https://github.com/misato/SQLiteManager4iOS

2) Le même code fonctionne pour l'instruction INSERT, mais pas pour la mise à jour

//NSString* sqlStr = (@"INSERT INTO sbu (sbuName) VALUES ('rrrr');)"); //WORKS 

3) Le code associé à cette mise à jour est le suivant:

mon code en ligne

NSString* sqlStr = (@"UPDATE User SET Name = 'wweerr' WHERE Id = 19"); //using a direct sql to verify if it works - does not 
    SQLiteManager* dbManager =[[SQLiteManager alloc]initWithDatabaseNamed:@"data.db"]; 
    NSError* error = [dbManager doQuery:sqlStr]; 

de la bibliothèque:

- (NSError *)doQuery:(NSString *)sql { 

    NSError *openError = nil; 
    NSError *errorQuery = nil; 

    //Check if database is open and ready. 
    if (db == nil) { 
     openError = [self openDatabase]; 
    } 

    if (openError == nil) {  
     sqlite3_stmt *statement;  
     const char *query = [sql UTF8String]; 
     sqlite3_prepare_v2(db, query, -1, &statement, NULL); 

     if (sqlite3_step(statement) == SQLITE_ERROR) { 
      const char *errorMsg = sqlite3_errmsg(db); 
      errorQuery = [self createDBErrorWithDescription:[NSString stringWithCString:errorMsg encoding:NSUTF8StringEncoding] 
                andCode:kDBErrorQuery]; 
     } 
     //NSLog(@"sql error: %@", error) 
     NSInteger result = sqlite3_finalize(statement); 
     errorQuery = [self closeDatabase]; 
    } 
    else { 
     errorQuery = openError; 
    } 
+0

Quoi est l'erreur sur la mise à jour et qu'est-ce qui sélectionne ... où Id = 18 donner? – Mark

+0

Salut Mark, la chose étrange ici est qu'aucune erreur est générée :( J'ai également fait un peu-étape de débogage, le flux n'est pas arrêté à tout moment .. Je suis clueless quant à savoir pourquoi cela ne fonctionne pas .. – Khayrattee

+0

Qu'est-ce que 'select * from Utilisateur où Id = 19' donne – Mark

Répondre

0

J'ai découvert l'écueil. J'ai enveloppé la chaîne en utilisant la méthode: initWithFormat.

Je viens assignez une variable comme ceci:

NSString *sqlStr = [[NSString alloc] initWithFormat:@"UPDATE User SET Name = 'some name' WHERE sbuId = 19"]; 

Et maintenant, je viens de passer cette variable dans:

NSError* error = [[Utilities dbManager] doQuery:sqlStr]; 

TODO/TO_ASK:

Pourquoi la même chose ne fonctionne pas avec:

NSString* sqlStr = [NSString stringWithFormat:@"UPDATE User SET Name = 'some name' WHERE sbuId = 19"]; 
0

Je voudrais essayer de "où id = '19'" (19 avec des guillemets simples) car le champ peut avoir été défini sous forme de texte puisque les champs sqlite sont faiblement typés.

+0

Salut Shine, je ne pense pas que ce soit le cas depuis que je cours cette requête exacte sur sqlite manager, ça fonctionne bien. aussi essayé ce que vous avez dit juste pour vous assurer, mais ne fonctionne toujours pas .. – Khayrattee