Используем SQLite (AES-256) в Delphi.

Источник: rgblog
Руслан Гайсин

В прошлой статье мы научились варить эту самую библиотеку SQLite из исходников SQLCipher, для того, чтобы использовать шифрование в SQLite. Сейчас мы научимся какже все таки с этой библиотекой работать. Нам понадобится интерфейс, так сказать " обертка ". Можно конечно работать с библиотекой напрямую, но лучше использовать уже готовое решение. На просторах интернета нашел обертку из двух файлов SQLite3.pas и SQLiteTable3.pas. Внизу статьи прикладываю эти файлы.

Почему же все таки SQLite?

Тут все просто, основные причины выбора данной БД, заключается в следующем:

  • библиотека абсолютно бесплатная
  • быстрая
  • открытый исходный код
  • используется только одна dll и сам файл базы данных (без всяких драйверов)
  • синтаксис SQL практически соответствует стандартному

Создание проекта

Для начало создаем новый проект и сохраняем на диск. В папку с созданным проектам копируем файлы обертки (SQLite3.pas и SQLiteTable3.pas), саму библиотеку (sqlite3.dll), и библиотеку шифрования (libeay32.dll).

В созданном проекте, для работы с SQLite, подключаем обертку для работы с базой:

uses SQLite3, SQLiteTable3;

Теперь добавляем сам объект для работы с БД. Для этого объявляем вместе с переменными:

var mybase: TSQLiteDatabase;

Взаимодействие с базой данных

Подключение

Подключаем файл базы данных, если его нет, то файл создаться:

mybase := TSQLiteDatabase.Create('base.db');

здесь мы задали имя файла нашей базы.

После открытия задаем пароль для шифрования базы:

mybase.ExecSQL('PRAGMA key = "MY PASSWORD"');

Создание и добавление

Создадим в нашей базе таблицу, для этого выполним SQL запрос. Для этого используется команада:

if not mybase.TableExists('FirstTable') then mybase.ExecSQL('CREATE TABLE FirstTable (ID INTEGER PRIMARY KEY, MYTEXT TEXT, MYBLOB BLOB)');

Чтобы исключить ошибку, провевряем есть ли в базе таблица с таким же именем.

Добавление записей выполняется также через SQL запросы:

mybase.ExecSQL('insert into FirstTable (MYTEXT) values("Оно работает!")');

Для получения номера вставленной строки используется функция:

id := mybase.GetLastInsertRowID;

Теперь рассмотрим добавление файла в BLOB поле:

var f1: TFileStream; begin f1:= TFileStream.Create('pidgin.bmp',fmOpenRead); mybase.UpdateBlob('UPDATE FirstTable SET MYBLOB = ? WHERE ID = '+id, f1); f1.Free; end;

Получение данных

Для извлечения данных из нашей БД, необходимо объявить новую переменную:

var mytable: TSQLiteTable;

Получаем данные из таблицы

mytable := mybase.GetTable('SELECT MYTEXT, MYBLOB FROM FirstTable where ID='+id);

И теперь уже получаем значение из нужного нам поля полученной таблицы:

myvar:=mytable.FieldAsString(0); // значение поля MYTEXT

Загрузка изображение из базы выполняется следующим образом:

var ms:TMemoryStream; ms := TMemoryStream.Create; sql := 'SELECT MYBLOB FROM FirstTable WHERE ID='+id; if mybase.GetTable(sql).FieldAsString(0) <> '' then begin ms := mybase.GetTable(sql).FieldAsBlob(0); ms.Position := 0; (Form1.Image1 as Timage).Picture.Bitmap.LoadFromStream(ms); ms.Free;

После всех манипуляций освобождаем память:

mybase.Free;

Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=33723