Проект Firelib для работы с Firebird
Класс-обёртка для работы с ОО API Firebird. Для чего? Упрощает работу, скрывая детали реализации.
Методы, назначение которых очевидно:
- void startTransaction();
- void commit();
- void rollback();
- void commitRetaining();
Методы и функции для работы с данными:
- void doSelect(const string& sql, vector& results, vector inputPars={});
Используется для получение строк данных, возвращаемых SELECT в запросе или хранимой процедуре.
Результат - в results.
Входящие параметры inputPars - опционально
...
vector<string> res;
conn.doSelect("select * from salary_history where old_salary = 78448.13", res);
for (string strRes : res) {
size_t start = 0;
size_t found = strRes.find_first_of(razd);
while (found != string::npos)
{
string r = strRes.substr(start, found - start);
cout << r << " ";
start = found + 1;
found = strRes.find_first_of(razd, start);
}
cout << '\n';
}
...
- void doModify(const string& sql, vector inputPars = {});
Используется для модификации данных, создания таблицы - insert, update, delete, create table.
...
conn.doModify("update employee set phone_ext='115' where last_name='Nelson'");
...
- void doScalar(const string& sql, string& results, vector inputPars = {});
Используется для получение скалярного результата в запросе или хранимой процедуре.
...
string res;
conn.doSelect("select * from customer where cust_no=1003", res);
size_t start = 0;
size_t found = res.find_first_of(razd);
while (found != string::npos)
{
string r = res.substr(start, found - start);
cout << r << " ";
start = found + 1;
found = res.find_first_of(razd, start);
}
...
-
bool doReadBlob(const string& sql, vector& results, vector inputPars={});
Чтение из BLOB. Если BLOB текстовый, то результат - в вектор results, если BLOB бинарный, то записывается в файл, имя которого передаётся в results[0].
Чтение текстового BLOB:
...
vector<string> res;
string sql="select blob_text from test_table where name='test3'";
bool isOk = conn.doReadBlob(sql, res);
if (isOk) {
for (string strRes : results) {
cout << strRes << '\n';
}
}
...
Чтение двоичного BLOB (в примере - изображения) и сохранение его в файл ‘pict.jpg’:
...
vector<string> res;
res.push_back("pict.jpg");
string sql="select blob_bin from test_table where name='test4'";
bool isOk = conn.doReadBlob(sql, res);
if (isOk) {
cout << "jpg file was created.\n\n";
}
...
- bool doWriteBlob(const string& sql, vector& toWrite, vector inputPars={});
Запись в BLOB. В векторе toWrite или имя файла, откуда загружаются данные (BLOB двоичный), или текст, который нужно записать (BLOB текстовый).
Запись текста в BLOB из указанного вектора.
...
vector<string> blob;
blob.push_back("Text.\n");
blob.push_back("Another text.\n");
blob.push_back("Yet another text.\n");
blob.push_back("And Yet another text...\n");
string sql="update test_table set blob_text=? where num=4";
bool isOk = conn.doWriteBlob(sql, blob);
if (isOk) {
cout << "Done.\n\n";
}
...
Запись изображения из файла pict.jpg в двоичный BLOB.
...
blob.push_back("pict.jpg");
string sql="update test_table set blob_bin=? where num=4"
isOk = conn.doWriteBlob(sql, blob);
if (isOk) {
cout << "Done.\n\n";
}
...
- void makeBackup (const string dbFile, vector& messages);
Процедура для сохранение БД в архив, используется service_mgr.
В векторе mess - сообщения о промежуточных результатах работы процедуры
...
vector <string> mess;
conn.makeBackup("employee.fdb", mess);
for (string strRes : mess) {
cout << strRes << '\n';
}
...
- void makeRestore(const string bkName, vector& messages);
Процедура восстановление из архива, используется service_mgr.
...
vector <string> mess;
conn.makeRestore("employee.fdb", mess);
for (string strRes : mess) {
cout << strRes << '\n';
}
...
- void doCreate(const string dbName, const string& user, const string& pass, const string& charset);
Создание файла базы данных.
Методы для настройки работы:
- void setDateMask(string newMask);
- string getDateMask();
get и set маски даты. По умолчанию маска такая: “%d.%m.%Y”
- void setBufSize(unsigned bs);
- unsigned getBufSize();
get и set размера буфера BLOB. По умолчанию 4096 байт.
Примеры работы
В архиве - два каталога, для Windwos и Linux. Отличия в кодировке и методах сборки. Проекты MS Visual Studio и CMake, соответственно. В файле base.ini нужно указать актуальный путь к тестовой базе (employee.fdb или test.fdb) и кодировку системы.