sqlite3 COUNT в iOS (особенно на iPhone / iPad) - PullRequest
1 голос
/ 16 декабря 2011

Я знаю, что симулятор и реальное аппаратное обеспечение iOS не ТОЧНО одинаковы, но я начинаю стягивать с себя волосы из-за этого. У меня есть этот код:

sqlite3 *database;
sqlite3_stmt *statement; 
int themeCount;

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
    NSString *updateSQL = [NSString stringWithFormat: @"SELECT COUNT(*) FROM Theme"];
    const char *update_stmt = [updateSQL UTF8String];

    if(sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL) == SQLITE_OK){

        if(sqlite3_step(statement)==SQLITE_ROW) 
        {
            themeCount = sqlite3_column_int(statement, 0);
        }
    }
    sqlite3_finalize(statement); 
    sqlite3_close(database);
}

С симулятором все работает отлично. Как только я нажимаю на устройства, происходит сбой. Я сломал его и нашел код возврата, где он не работает:

if(sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL) == SQLITE_OK)

Если я изменю эту строку для захвата кода (т. Е. Int x = sqlite3_prepare_v2 (...)), он вернет 0 с помощью симулятора, 1 с устройством. Что я тут не так делаю?!?!

Кроме того, для записи оператор CREATE для таблицы Theme:

@"CREATE TABLE Theme (ThemeId INTEGER PRIMARY KEY, ThemeName TEXT, Available BIT);"

(моя первая мысль, что он чувствителен к регистру)

1 Ответ

3 голосов
/ 16 декабря 2011

Вы не открываете базу данных, которую, как вы думаете, открываете. sqlite3_prepare_v2 является первым оператором, которому требуется схема. Я подозреваю, что ваш databasePath неверен.

Вы можете быть более конкретным с sqlite3_open_v2, опуская флаг SQLITE_OPEN_CREATE, который является значением по умолчанию для sqlite3_open, поэтому вы не замечаете, что новая запись создается при открытом вызове. См. Документы SQLite3 . С результатом

sqlite3_open_v2([databasePath UTF8String], &database, SQLITE_OPEN_READWRITE, NULL)

вы увидите, что база данных не существует.

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