Таблица SQLite с целочисленным столбцом хранит строку - PullRequest
8 голосов
/ 30 сентября 2010

Я нашел что-то странное в моем приложении.Я создал таблицу со столбцом с именем type, в котором должны храниться целые числа:

db.execSQL("CREATE TABLE " + CellColumns.TABLE + " ("
    + CellColumns._ID + " INTEGER PRIMARY KEY,"
    + CellColumns.TYPE + " INTEGER," // <-- this
    + CellColumns.CELL_ID + " INTEGER,"
    + CellColumns.CITY_ID + " INTEGER,"
    + CellColumns.LOAD + " INTEGER,"
    + CellColumns.ORIENTATION + " INTEGER);");

Чтение:

String type = c.getString(c.getColumnIndex(CellColumns.TYPE));

Но почему-то я всегда сохраняю строки в нем без проблем (кажетсязабыл, что этот столбец предназначен для целых чисел).Также чтение строк с запросом работает.Является ли это динамическое «приведение типа» столбца функцией sqlite?

Ответы [ 2 ]

15 голосов
/ 30 сентября 2010

С здесь :

Большинство механизмов баз данных SQL (насколько мы знаем, каждый механизм баз данных SQL, кроме SQLite) использует статическую жесткую типизацию.При статической типизации тип данных значения определяется его контейнером - конкретным столбцом, в котором хранится значение.

SQLite использует более общую систему динамических типов.В SQLite тип данных значения связан с самим значением, а не с его контейнером.Динамическая система типов SQLite обратно совместима с более распространенными системами статических типов других механизмов баз данных в том смысле, что оператор SQL, работающий со статически типизированными базами данных, должен работать в SQLite таким же образом.Тем не менее, динамическая типизация в SQLite позволяет ему делать то, что невозможно в традиционных жестко типизированных базах данных.

Так что да, это особенность sqlite.Прочитайте всю страницу, на которую я ссылаюсь, и внимательно прочитайте:)

0 голосов
/ 02 марта 2019

Вы можете получить его через c.getInt(), c.getDouble() .. и т. Д.

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