README.md

Проект 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) и кодировку системы.

Описание

Класс для работы с ОО API Firebird.

Конвейеры
0 успешных
0 с ошибкой