2010-08-04 5 views
0

Je suis nouveau à Objectiv-C et j'essaie de faire fonctionner ma base de données SQLite, mais je reçois sommene trobble je hobe je peux obtenir de l'aide sommen ici.objet SQLite à NSMutableArray

que je vais avoir mon code pour doe son bind tout « region_title » à tableview, et « region_id » à l'id comme « html » lorsque vous utilisez « Options »

j'ai essayer de chercher à ce sujet mais je ne peux pas trouver de l'aide pour mon problème, je peux aider sobrysy ici. Par exemple, si vous avez besoin de plus d'échantillons de code, vous pouvez recoder ce code si vous pensez que c'est mieux, maintenant j'ai besoin d'essayer cela et de le faire fonctionner. : 0)

réservoirs beaucoup pour toute aide de tous.

const char *sql = "SELECT region_id, region_title FROM region"; 
    sqlite3_stmt *statement; 

    if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) 
    { 
     while (sqlite3_step(statement) == SQLITE_ROW) 
     { 
      NSString *aRegionId = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)] autorelease]; 
      NSString *aRegionTitle = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)] autorelease]; 

      MapClass *mapclass = [[MapClass alloc] initWithName:aRegionTitle region_id:aRegionId]; 
      [todoArray addObject:mapclass]; 

     } 

     self.listData = todoArray; 
    } 

Son beau travail si j'utilise cette

  NSString *rowData = [NSString stringWithUTF8String: sqlite3_column_text(statement, 0)]; 
      NSString *RegionTitle = [NSString stringWithUTF8String: sqlite3_column_text(statement, 1)]; 

      [mapArray addObject:rowData]; 
      NSLog(@"rowData: %@", rowData); 

Maintenant, je ne ai besoin d'obtenir RegionTitle à un texte de l'étiquette, soe mon ID pas son le texte de l'étiquette, et fait mes travaux: Pouvez-vous m'aider?

Répondre

0

Vous devez supprimer les messages , car [NSString stringWith...] renvoie déjà les chaînes de libération automatique. En outre, la numérotation commence à 0.

NSString *aRegionId = [NSString stringWithUTF8String: 
            (char *)sqlite3_column_text(statement, 0)]; 
NSString *aRegionTitle = [NSString stringWithUTF8String: 
            (char *)sqlite3_column_text(statement, 1)]; 

devrait fonctionner.

(et, strictement parlant, vous devrait AutoRelease l'objet MapClass!)

+0

Hmm, nop sa ne fonctionne pas:/ – ParisNakitaKejser

+0

Ensuite, vous avez encore plus de problèmes ;-) nous éclairer peut-être un peu à * ce * va mal? – mvds

+0

J'ai maket a Answers, son travail maintenant juste un petit détail pour obtenir un nom dessus: 0) – ParisNakitaKejser

-1

Depuis que je ne vois pas de message d'erreur ou plus de détails à ce qui est faux (ou la structure de votre base de données), je pense que votre requête c'est le problème. Quels sont les types de données de region_id et region_table? J'ai supposé int et 'chaîne'.

en supposant que cela fonctionne:

NSString *query = [NSString stringWithFormat:@"select id, tableview from region"]; 

puis essayez ceci:

NSString *query = [NSString stringWithFormat:@"select `%i`, `%@` from `region`", region_id, region_table]; // assuming region_id is int and region_table is a string of some sort... 

if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK) 
    { 
     while (sqlite3_step(statement) == SQLITE_ROW) 
     { 
      NSString *aRegionId = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]; 
      NSString *aRegionTitle = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)]; 

      MapClass *mapclass = [[MapClass alloc] initWithName:aRegionTitle region_id:aRegionId]; 
      [todoArray addObject:mapclass]; 

     } 

     self.listData = todoArray; 
    } 

Notez que j'ai changé votre requête à un NSString ... votre choix (pas besoin de libérer les postes ci-dessus déjà déclaré), mais en faisant cela, vous devez le convertir en UTF8 dans cette ligne:

si (sqlite3_prepare_v2 (base de données, [requête UTF8String], -1, déclaration &, NULL) == SQLITE_OK)

bien sûr, vous ne rattrapent pas les valeurs NULL dans votre déclaration, vous pouvez jeter dans un « %@ est non nul » dans votre requête ..

+0

Ceci est un morceau de code vraiment bizarre. Quel est le but de cette première ligne? la requête n'aura aucun sens du tout. – mvds

+0

La question de NeoNman était très vague. La première ligne est l'instruction de requête, que NeoNmaN a indiqué être 'id' et 'tableview' ... à moins que je ne me trompe.So% i ou% @ sont des espaces réservés pour stocker l'id et tableview int et les valeurs de texte (s'il les renommait, ce qui est ce qu'il semblait dans son message initial ... à moins que je me trompe.J'allais à la généralisation, pour montrer le point de la requête, pas la réponse exacte dans ce cas .Oui, j'ai oublié d'omettre "sqlite3_stmt * statement;" ... mais ce n'était pas le point que j'essayais de montrer. Sans connaître la structure de la table, une requête exacte peut être devinée. –

0

déclarez. h fichier MSMutableArray * todoArray;

utiliser dans.m fichier

sqlite3 *database; 

NSString *fakePassword ; 

NSString *originalPassword; 

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
{ 
    sqlStatement = [NSString stringWithFormat:@"SELECT * FROM password"]; 

    sqlite3_stmt *compiledStatement; 

    if(sqlite3_prepare_v2(database, [sqlStatementcStringUsingEncoding:NSUTF8StringEncoding], -1, &compiledStatement, NULL) == SQLITE_OK) 
    {   
     NSLog(@"%@",sqlStatement); 

     while (sqlite3_step(compiledStatement) == SQLITE_ROW) 
     { 
      fakePassword = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)] retain]; 
      originalPassword = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)] retain]; 
     } 

      [todoArray addObject:fakePassword]; 

     sqlite3_finalize(compiledStatement); 
    }  
} 

}

Questions connexes