Используем SQLite (AES-256) в Delphi.Источник: rgblog Руслан Гайсин
В прошлой статье мы научились варить эту самую библиотеку SQLite из исходников SQLCipher, для того, чтобы использовать шифрование в SQLite. Сейчас мы научимся какже все таки с этой библиотекой работать. Нам понадобится интерфейс, так сказать " обертка ". Можно конечно работать с библиотекой напрямую, но лучше использовать уже готовое решение. На просторах интернета нашел обертку из двух файлов SQLite3.pas и SQLiteTable3.pas. Внизу статьи прикладываю эти файлы. Почему же все таки SQLite?Тут все просто, основные причины выбора данной БД, заключается в следующем:
Создание проектаДля начало создаем новый проект и сохраняем на диск. В папку с созданным проектам копируем файлы обертки (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; |