Сегодня:
— — —
Последние:
— 27.12, 20:12 / #6692
— 29.03, 23:32 / #6682
— 30 апреля 2012
Сейчас онлайн:
На сайте — 6
На IRC-канале — 2
Знакомство с SQLite
Вступление
Часто на форумах, да и здесь на сайте спрашивают, какую базу данных выбрать. Хочу сегодня представить вам ещё один движок БД, у которого есть свои преимущества.
Называется этот движок SQLite. Итак, его преимущества:
- бесплатный + открытый исходный код;
- достаточно быстр;
- не нуждается в дополнительной настройке на клиентской машине – распространять вместе с приложением нужно только одну dll;
- лоялен к программисту;
- возможность работать с компакт-диска (т.е. в режиме «только для чтения»);
- возможность работать с гостевого аккаунта;
- никаких записей в реестр и на диск (кроме dll и файла базы данных), никаких настроек сетевых протоколов;
- многоплатформенный: есть поддержка для многих языков (с 3 версии формат файла БД совместим для различных ОС и языков);
- сама dll зависит только от одной системной dll — MSVCRT.DLL, которая всегда есть в системе;
- синтаксис SQL достаточно хорошо соответствует стандарту – вы можете взять любую книгу, где описывается ANSI SQL 92 и пользоваться. Или посмотреть на сайте http://www.sqlite.org/lang.html.
- не рекомендован для баз большого размера (эксперты не рекомендуют более 200 Мб);
- есть только два типа данных – целое автоинкримент и строка (всё остальное – эмулируется через строки);
- не предназначен для многопользовательского использования (хотя это и возможно).
Начальные приготовления
Для работы с этой базой нам в обязательном порядке понадобится сама dll. Её можно скачать с сайта http://www.sqlite.org/ или взять в архиве к статье. С dll можно работать напрямую, но куда удобнее использовать обертку в виде классов. Есть обертка, которая подобна делфийскому TTable, есть и драйвер для ODBC, который позволяет работать с базой посредством TADOTable. И если первый вариант ещё интересен, то вариант с использованием через ADO лишен смысла – многие «вкусности» теряются.
В архиве вы найдете разные классы для работы. Я работаю с одним с них, и дальше буду описывать его. Главное преимущество – он без компонентов. Хотя кому-то это и покажется сложным, но можно, например, делать консольные приложения.
Также неплохо иметь ещё одну программу – программу для редактирования баз данных. Что-то в виде Database Desktop, только для SQLite. Такая программа есть и она бесплатна. Скачать можно здесь http://sqlitebrowser.sourceforge.net/ или опять же, взять в архиве. Хотя программа и проста, свою работу выполняет отлично. Мы не будем составлять базу в программе, а пойдём как настоящие кодеры — научимся создавать её в своей программе.
Работа с БД
Для примера мы создадим маленькую базу из одной таблицы. У нас будет одно автоинкрементое поле и два строковых.
Запускаем Delphi. Создаём новый проект. В папку с проектом копируем файлы sqlite3.pas, sqliteTable3.pas и sqlite3.dll. Дальше их надо подключить к проекту. Выбираем в меню Project – Add to project и добавляем эти файлы. Также не забываем сделать File – Use unit и выбрать эти же файлы, но предварительно переключившись на главный юнит.
После строки <$R *.dfm>допишем Var sldb: TSQLiteDatabase; — это будет глобальный объект для работы с базой. Хотя лучше сделать его свойством формы. Кто понимает – сделает 🙂
Делаем подключение к базе. Для этого впишем такой код в FormCreate:
Согласитесь, всё предельно просто. На ADO, если бы базы не было, пришлось бы делать дополнительную работу и писать процедуру не на одну строку.
Суть этого кода следующая – открыть файл test.db. Потом проверить, есть ли в нём таблица test. Если нет – создать, выполнив запрос. Если файла не будет, то он будет создан. Если же при создании таблицы у нас что-то не сложилось – закроем приложение.
Также не забываем, что за собой надо чистить.
Теперь научимся добавлять записи. Ставим кнопку с заголовком «Create records» («Создать записи») и создадим для неё такой обработчик
Теперь научимся отображать записи и выполнять запросы к базе.
Поставим TMemo, TEdit и кнопку «Select» («Выбрать»). По нажатию на кнопку будем искать записи в поле T1, которые начинаются на те же цифры, что мы ввели в Edit, и будем их выводить.
Как можно заметить, ничего особенного. Всё очень похоже на то, что доступно в BDE.
А картинки как?
Не знаю почему, но с другими базами добавление картинок для меня – большая трагедия. И если ещё с BDE всё спокойно, то с ADO сплошные приключения 🙂
В SQLite есть специальный тип поля – BLOB (он есть и во многих других БД).
Итак, общий алгоритм добавления бинарных данных в базу:
— Добавить запись с помощью INSERT. Но не включать бинарное поле (BLOB).
— Узнать ID добавленной записи (есть специальный метод у TSQLiteDatabase – GetLastInsertRowID – возвращает значение последнего добавленного автоинкрементого поля. Его имя не обязано быть ID. Важно только наличие)
— С помощью UPDATE обновить данное поле, добавив к нему изображение/BLOB (для этого опять же есть метод UpdateBlob. Он принимает два параметра. Первый – сиквел-выражение вида «UPDATE моя_таблица SET поле_блоба = ? WHERE поле_ ,fmOpenRead));.
Саму реализацию оставляю как домашнее задание 🙂
Результаты
Всего несколько строк, а имеем сколько преимуществ. На этом движке я построил несколько приложений, используя его для хранения информации. По субъективным ощущениям работает база в несколько раз быстрей, чем аналогичная на Access. Приложение при старте запускается моментально, ведь ему не надо инициализировать COM-объекты.
Пробуйте, дерзайте, экспериментируйте!
Статья добавлена: 31 января 2008
Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.
Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:
Ссылка для форумов (BBCode):
Быстрая вставка ссылки на статью в сообщениях на сайте:
<
<<статья:43>> — полноценная HTML-ссылка на статью (текст ссылки — название статьи).
Поделитесь ссылкой в социальных сетях:
Комментарии читателей к данной статье
Столкнулся с ошибкой, если в пути к файлу базы имеются кирилические символы, всплывает ошибка «Failed to open database «$$$$$$$$» : unable to open database file.» С помощью Вадима выяснил, что проблема заключается в необходимости передавать имя файла в кодировке «UTF-8», а не Win.
Index: SQLite3.pas
===================================================================
— SQLite3.pas (revision 2418)
+++ SQLite3.pas (working copy)
@@ -57,7 +57,7 @@
TSQLiteResult = ^PChar;
TSQLiteStmt = Pointer;
-function SQLite3_Open(dbname: PChar; var db: TSqliteDB): integer; cdecl; external ‘sqlite3.dll’ name ‘sqlite3_open’;
+function SQLite3_Open(dbname: PUTF8String; var db: TSqliteDB): integer; cdecl; external ‘sqlite3.dll’ name ‘sqlite3_open’;
function SQLite3_Close(db: TSQLiteDB): integer; cdecl; external ‘sqlite3.dll’ name ‘sqlite3_close’;
function SQLite3_Exec(db: TSQLiteDB; SQLStatement: PChar; CallbackPtr: Pointer; Sender: TObject; var ErrMsg: PChar): integer; cdecl; external ‘sqlite3.dll’ name ‘sqlite3_exec’;
function SQLite3_Version(): PChar; cdecl; external ‘sqlite3.dll’ name ‘sqlite3_libversion’;
Index: SQLiteTable3.pas
===================================================================
— SQLiteTable3.pas (revision 2418)
+++ SQLiteTable3.pas (working copy)
@@ -123,6 +123,7 @@
var
Msg: pchar;
iResult: integer;
+ utf8Str: UTF8String;
begin
inherited Create;
Msg := nil;
try
— iResult := SQLite3_Open(PChar(FileName), Fdb);
+ utf8Str := AnsiToUtf8(FileName);
+ iResult := SQLite3_Open(PUTF8String(utf8Str), Fdb);
if iResult <> SQLITE_OK then
if Assigned(Fdb) then
Ничего так, спасибо! Помогли разобраться с sqlite немного. С БД раньше вообще не работал.
Только программа слегка некорректная, вроде. У вас:
Memo1.Lines.Add(sltb.FieldAsString(0)+’, ‘+sltb.FieldAsString(0));
а надо:
Memo1.Lines.Add(sltb.FieldAsString(0)+’, ‘+sltb.FieldAsString(1));
Оставлять комментарии к статьям могут только зарегистрированные пользователи.
Парсинг от А до Я
Блог о программировании парсеров и web-автоматизации
Поиск по блогу
суббота, 26 января 2013 г.
SQLite и Delphi 7: работа с БД с помощью DISQLite
- Максимальная простота и легкость.
- Минимум телодвижений для работы приложения на другой машине: надо просто скопировать все содержимое папки к себе (кроме файлов БД нужна только dll).
Библиотека DISQLite для работы с SQLite в Delphi 7
Установка DISQLite
Создание базы данных
Прикинем, что нам надо хранить в базе данных. Пока по-минимуму.
Во-первых, таблица с юзерами.
Во-вторых, таблица с задачами (постинг картинок, текстов и т.д.).
В-третьих, таблица для хранения данных о приглашенных в друзья. Чтобы не повторяться и не приглашать повторно одних и тех же. Через некоторое время, если юзера взаимно не зафрендили, отписываться от него и позже уже не приглашать.
Все это только наброски, я еще сама точно не знаю, чем потом дополню базу.
Я покажу, как можно открыть базу (или создать, если такой базы нет) из приложения. Как вариант, можно создать ее в каком-нибудь менеджере БД (мне нравится бесплатная программа SQLite Expert Personal, ее функционала вполне достаточно), а дальше работать с созданной базой через IDE-компоненты.
Вот как выглядит окно SQLite Expert Personal с открытой БД:
Итак, код создания базы данных SQLite с помощью DISQLite в Delphi7:
В FormDestroy не забудьте очистить память, выделенную под vkBase.
Во время написания этого поста столкнулась с одной странной штуковиной, касающейся ключей и автоинкремента.
Сначала следует сказать, что в таблицах SQLite каждая запись снабжается уникальным в рамках этой таблицы ROWID. При добавлении записи этот ключ по умолчанию автоинкрементируется. Чтобы воспользоваться этим механизмом «встроенного инкремента», можно или назвать поле ROWID (еще варианты: _ROWID_, OID), или создать поле типа INTEGER PRIMARY KEY.
Так вот, если в менеджере SQL-код:
прокатывает, то при открытии такой базы через DISQLite (или при попытке исполнить этот запрос через Execute), выскакивает ошибка SQLite Error 11 — malformed database schema (vk_users) near AUTOINCREMENT. Может, это такой баг (особенность?) DISQLite?
Пожалуй, про создание базы и таблиц — все. Не думаю, что подробно следует освещать выполнение SQL, вроде как проще некуда.
SELECT в DISQLite
Чтобы делать выборку SELECT, в библиотеке есть TDISQLite3UniDirQuery. Небольшой пример, как работать с экземпляром класса безотносительно к конкретно этому приложению. Кто знаком с работой с БД, увидит, что все стандартно, ничего нового и особенного.
Можно создавать экземпляр TDISQLite3UniDirQuery динамически (как выше), а можно разместить его на форме и обращаться к его свойствам в редакторе.
SQLite в Delphi: большой обзор и LiteDAC в примерах
В этой статье я постарался собрать воедино и структурировать всю информацию по работе с SQLite в Delphi, изложенную на страницах блога, а также обновить кое-какие сведения по работе с СУБД SQLite. Всё-таки технологии не стоят на месте и иметь под рукой самую свежую информацию по рассматриваемому вопросу будет не лишним. Да и, в случае необходимости, читать одну большую статью по SQLite лично для меня проще, чем перечитывать большое количество статей в поисках ответа на интересующий вопрос.
В качестве компонентов для доступа к SQLite в Delphi я, как Вы понимаете, буду использовать LiteDAC. На данный момент последняя версия этих компонентов — 2.7.24. если же Вы не используете эти компоненты по каким-либо причинам, то я вам советую начать их использовать, так как пока я ещё не встретил более простых и понятных компонентов для работы с базами данных. Однако, если Вы используете для работы с SQLite что-либо другое, то этот обзор также может оказаться для вас полезным, потому что здесь будет рассматриваться не только работа LiteDAC, но и, в принципе, работа с SQLite.
Для начала, определимся с тем, какая информацию из блога будет использоваться в этом обзоре. В качестве исходных данных для статьи я использовал следующий материал блога webdelphi.ru:
Как видите, обзор охватывает период с 2010 по 2015 год и за 5 лет, что компоненты доступа к SQLite в Delphi, что сама СУБД претерпели изменения. Итак, начнем по порядку.
Содержание обзора:
1. Что представляет из себя SQLite и как всё устроено в SQLite?
SQLite — это компактная встраиваемая реляционная база данных. Для нас, как для разработчиков это говорит о том, что:
- SQLite легко настраивать. Для работы с SQLite не требуется установка дополнительного программного обеспечения (разве что для удобства разработки поставить какую-нибудь утилиту администрирования базы данных, но об этом чуть ниже). Всё, что необходимо, чтобы начать работу — это положить рядом с exe-файлом вашей программы небольшую динамическую библиотеку sqlite3.dll и использовать базовые методы (SQLite API) этой dll.
- SQLite просто использовать. Хотите — используйте методы dll, хотите — специальные компоненты, как платные, так и бесплатные. На сегодняшний день для Delphi имеется целый ряд компонентов, позволяющих работать с SQLite, в том числе и поставляемые вместе с RAD Studio.
База данный SQLite представляет из себя обычный файл, который может располагаться где угодно, лишь бы вы смогли получить к этому файлу доступ — даже на CD- или DVD-диске, правда, в этом случае вы сможете только читать базу, но не записывать в неё данные (что характерно). В итоге получаем: один файл — одна база данных. Легко, просто, понятно. Естественно, что если Вы только выбираете какую базу данных использовать в своем приложении, то одним из критериев выбора являются ограничения той или иной СУБД. Давайте посмотрим на ограничения СУБД SQLite.
Со всем списком ограничений SQLite Вы можете ознакомиться на официальном сайте, я же обращу внимание только на основные моменты. Итак ограничения, используемые по умолчанию:
Описание | Значение | Константа в исходнике |
---|---|---|
Максимальная длина строки или BLOB-поля | SQLITE_MAX_LENGTH | |
Максимальное количество колонок | SQLITE_MAX_COLUMN | |
Максимальная длина SQL-выражения | SQLITE_MAX_SQL_LENGTH | |
Максимальное количество таблиц в выражениях с JOIN | Максимальная глубина дерева выражений | SQLITE_MAX_EXPR_DEPTH |
Максимальное количество аргументов функции | SQLITE_MAX_FUNCTION_ARG | |
Максимальное количество термов в объединённом выражении с SELECT | SQLITE_MAX_COMPOUND_SELECT | |
Максимальная длина шаблона как аргумента операторов LIKE или GLOB | SQLITE_MAX_LIKE_PATTERN_LENGTH | |
Максимальное количество символов-заменителей в одном SQL-выражении | SQLITE_MAX_VARIABLE_NUMBER | |
Максимальная глубина рекурсии триггеров | SQLITE_MAX_TRIGGER_DEPTH | |
Максимальное количество присоединённых баз | SQLITE_MAX_ATTACHED | |
Максимальный размер страницы базы данных | SQLITE_MAX_PAGE_SIZE | |
Максимальное количество страниц в файле базы данных | SQLITE_MAX_PAGE_COUNT |
Как видите, ограничения более, чем приемлемые для разработки более менее серьезных приложений. Конечно, в случае острой необходимости Вы всегда сможете поменять некоторые ограничения в большую сторону (например, установить максимальное количество присоединенных баз данных в максимально возможное значение — 125), однако, лично мне с трудом представляется то, какое приложение надо писать в Delphi, чтобы превысить лимиты по умолчанию. Что же касается максимального размера файла базы данных, то, согласно официальной документации, в настоящее время максимально возможный размер файла БД SQLite составляет 140 Тб, однако конкретно это ограничение не тестировалось, так как разработчики SQLite не имеют доступа к программным и аппаратным средствам способных достичь такого лимита…что уж говорить нам — простым смертным пользователям SQLite.
2. Кто использует SQLite?
Еще один немаловажный момент при выборе СУБД, который волнует разработчиков — кто это использует? В особенности, если рассматриваются бесплатные инструменты и средства с открытым исходным кодом (к которым относится и SQLite). Ведь, как часто бывает, даже самый гениальный проект с открытым исходным кодом может внезапно уйти в небытие и разработчик останется ни с чем: морально устаревающий со временем инструмент, отсутствие поддержки и так далее. И здесь в пользу того или иного компонента или инструмента разработчика играет наличие в рядах пользователей наиболее титулованных и популярных компаний — уж, если они не боятся использовать что-то бесплатное, то всяко-разно есть шанс, что поддержка продукта будет идти регулярно и долго (по данным официального сайта, SQLite планируется поддерживать вплоть до 2050 года).
Вот небольшой перечень программных продуктов, которые активно используют SQLite:
- Google Chrome
- Skype
- Opera
- FireFox
- ThunderBird
- Safari
- Практически все программное обеспечение для Android, которому необходимо хранить какие-либо данные (в Android встроена поддержка SQLite)
В дополнение (могу, конечно, сейчас немного ошибиться, так как давно не заглядывал в работы этим приложений) также скажу, что SQLite использовался такими клиентами облачных хранилищ как Dropbox и Google Drive.
3. Какие инструменты использовать для администрирования баз данных SQLite?
Как говориться, на вкус и цвет фломастеры разные и каждый сам выбирает что использовать для администрирования баз данных SQLite: кому-то (как мне, например) по душе «тяжеловесные» программы типа SQLite Expert в которых можно сделать с базой всё, что угодно, другому — подавай легкий маленький и шустрый инструмент, чтобы только посмотреть структуру, добавить пару строк или таблиц в БД и забыть. Разные потребности, соответственно, рождают самые различные предложения. А, учитывая достаточно высокую популярность SQLite, можно смело говорить о том, что выбор программы для администрирования баз SQLite более, чем достаточен даже для самого привередливого пользователя. Когда я начинал свое знакомство с SQLite, то проводил небольшой обзор решение в области администрирования SQLite, но, как я уже писал выше, всё меняется и рынок программных продуктов также претерпевает свои изменения. Поэтому в этой статье, я лишь перечислю рассмотренные ранее программные продукты, а также дополню обзор другими приложениями, о которых мне сообщали Вы, уважаемые читатели, в своих комментариях к статьям.
Название | Стоимость | Ссылка на сайт | Скрин окна программы (кликабельно) | Дата обновления |
SQLite Database Browser | бесплатно | ссылка | 04/05/2016 | |
SQLite Administrator | бесплатно | ссылка | нет информации | |
SQLiteManager | $49 | ссылка | 17/06/2016 | |
SQLite Maestro | ссылка | 12/01/2015 | ||
SQLite Expert | версия «Personal» — бесплатно версии «Professional» от $59 Не рассмотренные ранее программные продукты | |||
SQLiteSpy | бесплатно | ссылка | 20/06/2016 | |
SQLiteStudio | бесплатно | ссылка | 10/06/2016 |
Таким образом, у нас в наличии семь различных программных продуктов для управления базами SQLite — более, чем достаточно, чтобы выбрать инструмент по своим потребностям. Я же, в дальнейшем буду использовать давно испытанный SQLite Expert Personal.
4. Какие компоненты есть в Delphi для доступа к SQLite?
В этой части, конечно, не такое большое разнообразие, как в части программ для управления базами SQLite, но, тем не менее и того, что есть в наличии сейчас, когда актуальной версией Delphi является Delphi 10.1 Berlin, более чем достаточно, чтобы начать работу с SQLite.
В теперь уже далеком 2010-м году, когда мы радовались выходу Delphi 2010 и обсуждали её новинки, на рынке компонентов Delphi для SQLite было совсем не радостно. Конечно, уже тогда были свои решения для работы с SQLite (всё-таки SQLite стартовала ещё раньше — в 2000-м году), но, тем не менее сама Delphi не могла похвастаться работой с SQLite «из коробки». Однако, тем, кому было необходимо использовать эту СУБД в Delphi-проектах, было вполне достаточно на первоначальном этапе использовать Delphi wrapper for Sqlite 3 от Тима Андерсона (Tim Anderson). Эти простые в работе классы для SQLite в Delphi и сейчас доступны для скачивания и, даже, со временем стали поддерживать Unicode. Этим же wrapper’ом пользовался и я в свое время, когда только начинал разбираться с SQLite.
На базе Delphi wrapper for Sqlite 3 также развивались такие обёртки для SQLite в Delphi, как Delphi SQLite Wrapper от разработчика библиотеки Synapse и компоненты от sv-utils. Все эти обёртки вносили какие-то улучшения в работу с SQLite (добавлялась работа с параметрами, поддержка Unicode, кроссплатформенность и т.д.), однако, повторюсь, они базировались на обёртке от Тима Андерсона. В настоящее время все эти замечательные миниатюрные компоненты, видимо, заброшены авторами, так как даты последних обновлений не особенно вселяют надежду на их дальнейшее развитие — 2012-2013 год. Из более менее «живых» бесплатных компонентов можно выделить ZeosLib, которой я пользовался ещё в бытность Delphi 7, а также компоненты DISQLite3 от разработчика SQLiteSpy.
Это, в принципе, и понятно, потому как прошло несколько лет и Embarcadero представила нам новый релиз — Delphi XE3, которая позволяла работать с базами SQLite, используя DBExpress. И, как говориться, жизнь стала налаживаться. Прошло совсем немного времени и уже 5 февраля 2013 года Embarcadero заявила в своем пресс-релизе о покупке компонентов AnyDAC (ныне известных под названием FireDAC) — мощной библиотеки компонентов для доступа практически к любым базам данных, включая и SQLite. Таким образом, мы уже имели возможность после покупки лицензии на Delphi свободно использовать для доступа к базам данных SQLite:
- Бесплатные обёртки от различных разработчиков «Delphi SQLite Wrapper», «Delphi wrapper for SQLite 3«, sv-utils и т.д.
- Бесплатные библиотеки компонентов (ZeosLib, FireDAC)
- Технологию DBExpress
- Компоненты (DISQLite).
Однако, обилие различных бесплатных и относительно бесплатных решений в области работы с SQLite в Delphi нисколько не затормозило разработку платных компонентов для доступа к SQLite. И здесь, наиболее ярким представителем, на мой взгляд, является компания Devart с их замечательными компонентами для доступа к SQLite — LiteDAC (стоимость компонентов на данный момент составляет от 6800 руб.).
Таким образом, на сегодняшний день можно сделать вывод, что для работы с SQLite в Delphi нет никаких препятствий. Ваши возможности ограничиваются лишь вашими потребностями в той или иной функциональности компонентов. Я же, как и три года назад, в работе использую компоненты от Devart LiteDAC. И теперь перейдем непосредственно к работе с SQLite в Delphi.
5. Установка и настройка LiteDAC
Скачать пробную версию компонентов можно с официального сайта Devart. После того, как установщик скачан, запускаем его и устанавливаем компоненты. После установки компонентов на вкладке LiteDAC в Delphi появится вот такой набор компонентов:
Так как компоненты LiteDAC распространяются в двух редакциях: Standard и Professional, то набор компонентов у них разный. Так в версии LiteDAC Standard Edition Вы сможете воспользоваться следующими компонентами для доступа к SQLite:
TLiteConnection | Компонент для создания подключения к БД SQLite. | |
TLiteQuery | Компонент для выполнения запросов и работы наборами данных. | |
TLiteSQL | Компонент для выполнения SQL-запросов, которые не возвращают наборы данных | |
TLiteTable | Компонент позволяет получать и изменять данные в одной таблице БД без написания SQL-запросов | |
TLiteUpdateSQL | Компонент позволяет настроить операции обновления для наборов данных. | |
TLiteDataSource | Компонент для создания связей между компонентами LiteDAC, содержащими наборы данных и элементами управления на форме. | |
TLiteScript | Компонент для выполнения последовательности SQL-запросов | |
TLiteSQLMonitor | Компонент для мониторинга выполнения SQL-запросов к БД SQLite | |
TLiteConnectDialog | Компонент для создания пользовательских диалогов для запроса логинов/паролей и ключей шифрования БД. | |
TVirtualTable | Компонент для хранения наборов данных в памяти. |
Профессиональная версия LiteDAC (Professional Edition) расширяется следующими компонентами
TLiteUserFunction | Компонент для определения пользовательских функций для будущего использования в SQL-запросах | |
TLiteLoader | Компонент обеспечивает быструю загрузку внешних данных в базу | |
TLiteDump | Компонент обеспечивает создание дампов для базы данных или отдельных её частей и восстановления БД из этих дампов. | |
TLiteMetaData | Компонент для извлечения мета-данных из базы данных | |
TLiteEncryptor | Компонент для шифрования/дешифрования базы данных SQLite | |
TCRBatchMove | Компонент обеспечивает обмен данными между всеми потомками TDataSet. |
Со всеми отличиями версий LiteDAC вы можете ознакомиться на официальном сайте, я же обращу внимание на три важных, на мой взгляд, преимущества профессиональной версии:
- Возможность использовать прямой доступ (Direct Mode) к БД SQLite
- Возможность использовать шифрование базы данных (в режиме Direct Mode)
- Возможность разработки приложений для работы с базами данных под Android и iOS
Перейдем к разработке нашего первого приложения для работы с SQLite в Delphi.
6. Первая база данных SQLite в Delphi
Пусть в нашей базе данных будет храниться, например, информация о курсе валют от ЦБ РФ. Для этого разберемся со структурой нашей будущей базы данных и типами данных.
Так как мы будем использовать API ЦБ РФ по курсам валют, то нам потребуется создать в нашей базе данных как минимум две таблицы:
- Справочник кодов валют
- Данные по курсам валют на определенную дату.
Таблица справочника кодов валют будет содержать следующие столбцы:
- идентификатор записи, например, 1
- идентификатор валюты, например, R01010
- номинал, например, 10
- наименование валюты на английском языке, Australian Dollar
- наименование валюты на русском языке, например, Австралийский доллар
Таблица данных о курсах валют будет содержать следующую информацию:
- идентификатор записи, например, 1
- идентификатор валюты, например, R01010
- Дата на которую установлен курс, например, 10.08.2016
- Курс валюты по отношению к рублю, например, 49,9973
6.1. Создаем базу данных с помощью SQLite Expert
Создавать базу данных можно как с помощью наших компонентов непосредственно в Delphi, так и, используя одну из программ, рассмотренных выше. Например, создать в SQLite Expert таблицу со справочником кодов можно следующим образом:
1.Запускаем SQLite Expert и жмем кнопку «New Database»
2. Задаем имя базы данных, её расположение, кодировку текста и другие параметры
О таком параметре как Vacuum мы поговорим чуть позднее. Пока же жмем «Ok» и переходим к следующему шагу — созданию таблицы.
3. Для создания новой таблицы в базе данных вы можете кликнуть правой кнопкой мыши на названии базы в дереве слева или же воспользоваться разделом меню «Table» и выбрать пункт «New Table». После этого откроется редактор для в котором необходимо указать название новой таблицы, определить необходимые поля, а также указать другие параметры, если это необходимо. В нашем случае, таблицы «valute» будет выглядеть следующим образом:
Как видите, несмотря на то, что в SQLite нет такого типа, как CHAR, я все равно его использовал при создании таблицы и это не будет иметь никаких негативных последствий для работы с нашей базой данных.
Аналогичным образом создадим таблицу с курсами валют, опять же используя такие типы данных как DATE и CURRENCY:
Теперь рассмотрим другой вариант создания базы данных — с помощью LiteDAC.
6.2. Создание базы данных с помощью LiteDAC
Для создания базы данных воспользуемся компонентом TLiteConnection. Для этого создаем в Delphi новый VCL-проект, бросаем на главную форму компонент TLiteConnection с вкладки LiteDAC и устанавливаем свойство TLiteConnection.Options.ForceCreateDatabase в значение True. Это позволит нам, в случае отсутствия файла базы данных по указанному в свойстве Database пути создать его.
Теперь создадим обработчик события OnBeforeConnect компонента и напишем следующий код: