Извлечение целочисленного значения из базы данных sqlite3 (проблема в obj-c)

#objective-c #sqlite #integer #nsuinteger

#objective-c #sqlite #целое #nsuinteger

Вопрос:

В базе данных sqlite3 у меня есть таблица «данные» с двумя полями: тип и путь. Тип поля определен как INTEGER. В это поле я вставляю значение NSUInteger (которое будет, например, 0 или 1). Проблема в том, что при его извлечении я получаю «странное» значение. Я не знаю, где я ошибаюсь.

    if (init_statement == nil) {
        const char *sql = "SELECT type,path FROM data WHERE id=?";
        if (sqlite3_prepare_v2(database, sql, -1, amp;init_statement, NULL) != SQLITE_OK) {
            NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
        }
    }

    sqlite3_bind_int(init_statement, 1, primaryKey);

    if (sqlite3_step(init_statement) == SQLITE_ROW) {
     int type = (int)sqlite3_column_text(init_statement, 0);
     char *relPath = (char *)sqlite3_column_text(init_statement, 1);

    // other stuff
    } 

    // Reset the statement for future reuse.
    sqlite3_reset(init_statement);
  

Ответ №1:

SQLite допускает только 64-разрядные целые числа со знаком. Вы присваиваете ему целое число без знака. Вместо этого измените его на NSInteger.

Комментарии:

1. Я меняю его на NSInteger. Вставлено правильное значение, но когда я извлекаю его с помощью приведенного выше кода, это не так.

2. Почему вы не возвращаете его обратно в NSInteger ?

3. возникает та же проблема, если я ее приведу. Я проведу несколько других тестов.

4. Почему вы не используете sqlite3_column_int64 ?