Страницы

Поиск по вопросам

среда, 1 января 2020 г.

sqlite. Как создать атрибут типа Date

#java #android #android_sqlite


Глядя на уроки на просторах интернета вижу, что добавляют данные в базу используя
ContentValues. Но конструктора принимающего тип Date там нет. Там небольшой список
типов данных.   Я хотел создать таблицу, в которой есть столбец с датой и столбец с
текстом. Думал поделить дату на 3 столбца. В одном год, в в другом месяц и в третьем
дни. Но мне порекомендовали создать один столбец с атрибутом Date. Но как я понял sqLite
не поддерживает подобных типов данных.
Хочу уточнить так ли это и как мне лучше поступить, если я создаю таблицу в которой
есть разный текст на каждый день в течении нескольких лет.  Есть подозрение, что если
добавить дату в таком формате ГГГГ-ММ-ДД в один столбец, то sqlite сможет делать выборку
по дате. 
    


Ответы

Ответ 1



Дата в контексте программирования на Java - число миллисекунд после 01.01.1970 00:00 UTC Именно его и храните в БД для дат. После извлечения из БД объект Date можно получить просто - Date dateFromDb = new Date(longValueFromDb) Делать все возможные выборки по дате будет просто - вы будете делать выборки не по каким-то строкам в разных столбцах, но по числу в одном столбце.

Ответ 2



Не поддержу категоричность ответа @ЮрийСПб Согласно документации, SQLite, хотя и не имеет специального типа для хранения даты, но, поддерживает хранение даты и манипуляции с ними в одном из 3-х форматов: 1) TEXT как строку ISO8601 ("YYYY-MM-DD HH:MM:SS.SSS"). 2) REAL как Юлианский номер дня с 24 ноября, 4714 д.н.э. GMT - согласно пролептическому Григорианскому календарю 3) INTEGER в качестве Unix Time, количество секунд с 1970-01-01 00:00:00 UTC. Если дата задана в одном из этих 3-х форматов, то поддерживается работа с встроенными в SQLite функциями работы с датами, а также задание в запросах операций >, >=, <, <=, =, between Отдельно отмечу, что хранение даты в виде строки ISO8601, имеет один небольшой бесплатный бонусик, а именно становится возможным сохранение часового пояса в дате, чего как вы понимаете нет, когда мы храним UNIX time - иногда это важно. Минусы, конечно же понятны: оверхед в хранении строки и лишние костЫ в конвертации.

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

Отправить комментарий