2011-07-05 8 views
3

J'ai une base de données SQLite que je crée dans mon application iOS. Une série de nombres sont stockés dans cette base de données. Je veux additionner toute la colonne et renvoyer les données à afficher dans l'application.iOS SQLite Sum et récupérer des données

Tout ce qui écrit dans la base de données fonctionne correctement, mais je suis bloqué en essayant de renvoyer les données additionnées. Toute aide serait grandement appréciée.

-(void) dataReturn: (NSString *) tableNamed{ 
    NSString *myData = [NSString stringWithFormat:@"SELECT SUM(column1) AS data1 FROM myDB", tableNamed]; 

    sqlite3_stmt *statement; 

    if(sqlite3_prepare_v2(db, [myData UTF8String], -1, &statement, nil) ==SQLITE_OK){ 
     while (sqlite3_step(statement) == SQLITE_ROW){ 

      int *field2 = (int *) sqlite3_column_int(statement, 1); 

      NSString *myString =[[NSString alloc] initWithFormat:@"%@", field2]; 

     } 
    } 
} 

Répondre

4

Bonjour Nathan faire un appel comme

[self dataReturn:@"Bill"]; 

pour fonctionner

-(void)dataReturn:(NSString *)tableName{ 

    sqlite3 *database; 
    sqlite3_stmt *statement; 

    NSString *queryString = [NSString stringWithFormat:@"SELECT SUM(price) AS TOTAL FROM %@", tableName]; 

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 

     if(sqlite3_prepare_v2(database, [queryString UTF8String], -1, &statement, nil) == SQLITE_OK){ 
      while (sqlite3_step(statement) == SQLITE_ROW) { 
        int field1 = sqlite3_column_int(statement, 0); 
        NSLog(@"The sum is %d ", field1); 
      } 
     } 
    } 
} 

récupéreront les données souhaitées vous. Le schéma de la table "Bill" est "CREATE TABLE Bill (prix double, quantité INTEGER)". Le résultat récupéré aura des colonnes indexées à partir de "0" donc nous passerons 0 pour la première colonne. J'espère que vous pourrez en tirer quelques indices. À votre santé!!

int field1 = sqlite3_column_int(statement, 0); 
3

Des sqlite3_column_int docs:

La colonne de gauche du jeu de résultats a l'indice 0.

De plus, cette fonction retourne un int, pas int*. Essayez:

int field2 = sqlite3_column_int(statement, 0); 
+0

Merci pour la réponse, mais je suis toujours obtenir une valeur de 0 si je trace la variable (je vu le db et vérifié j'ai données là-dedans, je devrais obtenir 61 comme une réponse) ... – Nathan

+0

myDB est-il le nom d'une table dans votre base de données? Je remarque que vous n'utilisez pas le paramètre tableNamed dans la chaîne myData. De plus, en plus de vous débarrasser du pointeur * devant le champ 2, assurez-vous que vous utilisez également 0 au lieu de 1 comme deuxième paramètre dans la fonction sqlite3_column_int. (Et enfin, assurez-vous d'utiliser% d au lieu de% @ dans votre méthode initWithFormat.) –

Questions connexes