Фон
В течение всего дня я пытался решить проблему, я прочитал все статьи и документацию, которые я смог найти в Интернете, но я не могу решить эту проблему. Я пишу приложение для iPhone, и мне нужно работать с базой данных sqlite (sqlite3).
Основная проблема
Я создал свою базу данных, и все идет хорошо, пока я не захочу получить количество строк в моей таблице. Имя таблицы ARTICLES
, поэтому я написал
SELECT COUNT(*) FROM ARTICLES
Моя программа ничего не делает и записывает в журнал: Неизвестная ошибка.
const char *query = "SELECT COUNT (*) FROM ARTICLES";
sqlite3_stmt *compiledQuery;
sqlite3_prepare_v2(database, query, -1, &compiledQuery, NULL);
Программа выводит сообщение " Неизвестная ошибка" в приведенном выше коде, и я не могу получить количество строк. Кто может помочь мне решить эту проблему... или может быть что-то с sqlite не правильно?
код
- (int) GetArticlesCount
{
if (sqlite3_open([self.dataBasePath UTF8String], &articlesDB) == SQLITE_OK)
{
const char* sqlStatement = "SELECT COUNT(*) FROM ARTICLES";
sqlite3_stmt *statement;
if( sqlite3_prepare_v2(articlesDB, sqlStatement, -1, &statement, NULL) == SQLITE_OK )
{
if( sqlite3_step(statement) == SQLITE_DONE )
{
}
else
{
NSLog( @"Failed from sqlite3_step. Error is: %s", sqlite3_errmsg(articlesDB) );
}
}
else
{
NSLog( @"Failed from sqlite3_prepare_v2. Error is: %s", sqlite3_errmsg(articlesDB) );
}
// Finalize and close database.
sqlite3_finalize(statement);
sqlite3_close(articlesDB);
}
return 0;
}
В этой строке появляется неизвестная ошибка:
NSLog( @"Failed from sqlite3_step. Error is: %s", sqlite3_errmsg(articlesDB) );
Что я должен добавить в код или что мне делать, чтобы получить количество строк? Пожалуйста, помогите...
Рабочий код (не эффективен)
const char* sqlStatement = "SELECT * FROM ARTICLES";
sqlite3_stmt *statement;
if( sqlite3_prepare_v2(articlesDB, sqlStatement, -1, &statement, NULL) == SQLITE_OK )
{
int count = 0;
while( sqlite3_step(statement) == SQLITE_ROW )
count++;
}
Я получаю правильное количество строк! Но я не думаю, что это эффективный метод... Я думаю, что что-то с sqlite не подходит...