Главная страница » Статьи и уроки » C# статьи » Использование SQLite в C#: Часть 2 – Типы данных
Опрос
Какие статьи добавлять?
Выделенные и виртуальные серверы в Европе

Использование SQLite в C#: Часть 2 – Типы данных

Автор: administrator Дата: 15-02-2015, 17:27 Категория: Статьи и уроки / C# статьи
В отличие от подавляющего большинства других движков баз данных, SQLite не имеет строгой типизации хранимых данных. Это сделано в целях обеспечения максимальной совместимости синтаксиса SQL-запросов с другими SQL-движками. Однако определенный набор правил все же есть.
SQLite имеет пять классов хранимых данных:
  • NULL – null, просто null
  • INTEGER – целое число
  • REAL – вещественное число
  • TEXT – текст
  • BLOB – блок данных

В SQLite нет булева типа данных, поэтому значение TRUE и FALSE предполагается храниться в виде 1 и 0 класса INTEGER.

Также SQLite не содержит отдельного класса для хранения даты и времени. На усмотрение разработчика предлагается три варианта хранения:
INTEGER – в виде целого числа секунд, прошедших от точки отчета 1970-01-01 00:00:00 UTC. Это наиболее популярный и быстрый вариант, знакомый поклонникам Unix.
  • TEXT – в виде строкового значения по стандарту ISO8601 ("YYYY-MM-DD HH:MM:SS.SSS")
  • REAL – число дней, прошедших с полудня по Гринвичу 24 ноября 4714 года до н.э. по Юлианскому календарю.

За исключением колонки, выделенной для ключей записей, любые другие колонки таблиц могут хранить данные любого типа. Однако разработчик может задать для колонок предопределенные типы сопоставлений, которые будут определять тип и преобразование к нему вводимых данных.

За исключением колонки, выделенной для ключей записей, любые другие колонки таблиц могут хранить данные любого типа. Однако разработчик может задать для колонок предопределенные типы сопоставлений, которые будут определять тип и преобразование к нему вводимых данных.
В колонке типа TEXT могут храниться данные классов NULL, TEXT и BLOB, при записи числового значения оно преобразуется в текст.
В колонке типа NUMERIC могут храниться данные все классов. При записи текстового значения делается попытка преобразовать его в целое или вещественное число, если таковое действие возможно.
Колонка типа INTEGER аналогична NUMERIC, за единственным исключением – они по разному обрабатываются функцией CAST.
Колонка типа REAL также аналогична NUMERIC, за исключением того, что целые числа при записи обязательно преобразуются в вещественные.
Колонка типа сопоставления NONE не выполняет каких-либо преобразований вводимых данных.
При создании таблиц их колонки получают свои типы сопоставления в следующем порядке:
  • Если описание колонки содержит подстроку "INT", то ей присваивается тип сопоставления INTEGER.
  • Если описание колонки содержит подстроки "CHAR", "CLOB" или "TEXT", то ей присваивается тип сопоставления TEXT.
  • Если описание колонки содержит подстроку "BLOB", то ей присваивается тип сопоставления NONE.
  • Если описание колонки содержит подстроки "REAL", "FLOA" или "DOUB", то ей присваивается тип сопоставления REAL.
  • Во всех остальных случаях колонка получает тип NUMERIC.


По умолчанию, каждая запись таблицы SQLite содержит ключ – 64-битное целое уникальное число, позволяющее однозначно идентифицировать запись. В тексте SQL-запроса это значение можно считать с помощью предопределенных названий "rowid", "oid", "_rowid_". Данные значения ключей не генерируются движком, если при создании таблицы был указан параметр WITHOUT ROWID.
Если при создании таблицы одна из колонок имеет тип INTEGER и параметр PRIMARY KEY в том или ином виде, то эта колонка автоматически становится псевдонимом для значений ключей записей таблицы. Примеры:
CREATE TABLE t(id INTEGER PRIMARY KEY, title);
CREATE TABLE t(id INTEGER, title, PRIMARY KEY(id));
В этом случае значения колонок, полученных в результате выполнения запроса SELECT id, rowid FROM t, будут идентичными.
По умолчанию, если значения ROWID достигли максимального значения INTEGER, то новые значения будут подбираться среди ранее использованных значений ключей удаленных записей. Если разработчику необходимо, чтобы ключевые значения всегда оставались уникальными, то при создании таблицы в описании ключевой колонки следует указать параметр AUTOINCREMENT:
CREATE TABLE t(id INTEGER PRIMARY KEY AUTOINCREMENT, title);
Значения ключей могут задаваться вручную непосредственно в командах INSERT и UPDATE:
INSERT INTO t(rowid, title) VALUES(10, 'One');

Продолжение в следующей статье...

Новость отредактировал administrator - 28-01-2019, 20:13
Причина: Потеряна начальная строка в полной новости, видимо после переноса сайта на новый сервер. Спасибо гостю сайта, написавшему о данной ошибке с IP: 83.69.166.235
  • Не нравится
  • 0
  • Нравится
Просмотров: 3 002 Напечатать Жалоба
Теги: SQLite
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.
Написать комментарий
Ваше Имя:
Ваш E-Mail:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
Код: Кликните на изображение чтобы обновить код, если он неразборчив
Введите код: