SQLite count (*) как получить результат? - PullRequest
4 голосов
/ 25 июня 2010

я сделал этот код для подсчета количества строк в дБ

    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;

Но результат всегда равен 0.

Итак, я не уверен, является ли rows = sqlite3_column_int(countstmt, 0); правильным оператором для получения количества строк ... это правильно?

Ответы [ 2 ]

5 голосов
/ 25 июня 2010

Редактировать: для выполнения оператора SQL вам необходимо вызвать все эти 6 функций в следующем порядке: :

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

Вам не хватает шагов sqlite3_step и sqlite3_finalize.

Кстати, вы можете использовать sqlite3_get_table() или sqlite3_exec() для этих простых запросов.


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

Крайний левый столбец набора результатов имеет индекс 0.

Следовательно, вы должны использовать

rows = sqlite3_column_int(countstmt, 0);
4 голосов
/ 25 июня 2010

вы пропустили sqlite3_step(countstmt); до rows = sqlite3_column_int(countstmt, 0); для выполнения запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...