2010-06-25 9 views
4

je l'ai fait ce code pour compter le nombre de ligne dans une dbCompte SQLite (*) comment obtenir le résultat?

int rows = 0; 
if (sqlite3_open([[SqliteManager getDBPath] UTF8String], &database) == SQLITE_OK) { 
    const char *sql = "select count(*) from artheca"; 
    sqlite3_stmt *countstmt; 

    if(sqlite3_prepare_v2(database, sql, -1, &countstmt, NULL) == SQLITE_OK) {    
     NSLog(@"inside"); 
     rows = sqlite3_column_int(countstmt, 0); 
    } 
} 
else 
    sqlite3_close(database); 
return rows; 

Mais le résultat est toujours 0.

Alors, je ne sais pas si rows = sqlite3_column_int(countstmt, 0); est la déclaration droit d'obtenir le nombre de lignes ... est-ce correct?

+0

Cela ressemble à une erreur off-by-one - les colonnes commencent par 0, pas par 1. – Piskvor

Répondre

5

Edit: Pour exécuter une instruction SQL que vous devez call all these 6 functions in order:

sqlite3_open()  Open the database 
sqlite3_prepare()  Create the SQL statement 
sqlite3_step()  Execute the statement 
sqlite3_column()  Fetch the result 
sqlite3_finalize() Destroy the statement 
sqlite3_close()  Close the database 

Il vous manque les sqlite3_step et sqlite3_finalize étapes. Par ailleurs, vous pouvez utiliser sqlite3_get_table() ou sqlite3_exec() pour ces requêtes simples.


De http://www.sqlite.org/c3ref/column_blob.html,

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

Par conséquent, vous devez utiliser

rows = sqlite3_column_int(countstmt, 0); 
+0

vous avez raison, mais en utilisant 0 dans la fonction retourne toujours le même résultat .. donc je répare mon post parce que ce n'est pas le point que je pense! – nox

+0

+1 pour mentionner les étapes! Merci! – NightFury

4

vous manqués sqlite3_step(countstmt); avant rows = sqlite3_column_int(countstmt, 0); pour exécuter la requête

Questions connexes