Жив ли IBPP?
Модератор: kdv
Жив ли IBPP?
В поисках библиотеки для работы с FB для VC набрел на библиотеку IBPP
www.ibpp.org (не сочтите за рекламу)
последний релиз который я нашел ibpp-2-5-3-1-src (от 21.02.2007)
На сайте есть упоминание о третьей версии, но ссылок что бы скачать не нашел.
Жив ли еще этот прокет?
И вообще хотелось бы услышать мнение людей об этой библиотеке.
Если не по теме, прошу извинить.
www.ibpp.org (не сочтите за рекламу)
последний релиз который я нашел ibpp-2-5-3-1-src (от 21.02.2007)
На сайте есть упоминание о третьей версии, но ссылок что бы скачать не нашел.
Жив ли еще этот прокет?
И вообще хотелось бы услышать мнение людей об этой библиотеке.
Если не по теме, прошу извинить.
Re: Жив ли IBPP?
Использую. Есть несколько небольших нареканий, но в целом нормально.andov писал(а):И вообще хотелось бы услышать мнение людей об этой библиотеке.
Re: Жив ли IBPP?
А что за нарекания? И можно узнать, как давно используете?ArtDen писал(а):Использую. Есть несколько небольших нареканий, но в целом нормально.andov писал(а):И вообще хотелось бы услышать мнение людей об этой библиотеке.
Как на счёт многопоточности? Что-то на сайте не нашёл упоминаний потоко-безопасна ли либа?
Закладываю новый проект, а инструмент неопробаванный.
Не хотелось бы жёстких граблей.
Re: Жив ли IBPP?
отличная библиотека, использую под Windows и Linux.
Из замеченных недостатков: автор активно использует exception, но сам их слабо отрабатывает . В нештатных ситуациях, возможно, что часть деструкторов сработает, а часть нет. Я лично с этим не сталкивался. Нужно внимательно проверять ситуации, типа отключение сервера во время fetch и т.д.
Из замеченных недостатков: автор активно использует exception, но сам их слабо отрабатывает . В нештатных ситуациях, возможно, что часть деструкторов сработает, а часть нет. Я лично с этим не сталкивался. Нужно внимательно проверять ситуации, типа отключение сервера во время fetch и т.д.
Использование IPBB
В связи с постоянно увеличивающимся интересом пользователей к альтернативным платформам, растет и интерес программистов к инструментам и библиотекам для разработки на этих платформах. В том числе у многих возникает вопрос: как работать с СУБД Firebird/Interbase ? Предлагаю Вашему вниманию небольшую обзорную статью.
Использование IPBB
Введение
В мире открытых исходников есть множество хороших мультиплатформенных инструментов. Сегодня мы рассмотрим один из них - IBPP, библиотеку для доступа к СУБД Firebird/Interbase.
Что такое IBPP
IBPP - это библиотека для доступа к СУБД Firebird/InterBase, набор С++ классов для работы со стандартной клиентской библиотекой.
Лицензия
IBPP распростроняется по лицензии IBPP License v1.1, которая разрешает использование, модификацию и распространение. Текст лицензии очень короткий, и желающие могут ознакомится с ним на сайте проекта или прочесть файл license.txt.
Установка IBPP
Есть несколько вариантов использования IBPP:
1. Самый простой вариант - включить в проект все .cpp файлы. Этот вариант ввиду простоты и очевидности мы рассматривать не будем.
2. Собрать библиотеку. Динамическую, статическую и т.д., вы выбираете сами. Компилируете тоже сами, никаких скриптов или make-файлов нет.
Я, под Windows собираю библиотеку статической линковки, под Linux - библиотеку динамической загрузки.
Для сборки под Windows воспользуйтесь вашей любимой IDE. Для Linux придется написать небольшой make-файл.
Для сборки IBPP необходимо иметь установленную библиотеку доступа libfbclient.
Работа с БД
Работа с БД, обычно состоит из следующих шагов:
- подключение к БД
- выполнение SQL-запроса
- получение результатов
- закрытие соединения с БД
Итак, перейдем от слов к делу. Подключение к существующей БД с помощью IBPP осуществляется очень просто.
Для каждого соединения с БД нужен объект IBPP::Database, через него осуществляться вся работа. В первой строке мы создаем такой объект и инициализируем его минимально необходимыми данными: имя или ip-адрес сервера, название файла БД или алиас, имя пользователя, пароль. Также можно указать роль и кодировку. Суть методов connect()/Disconnect() думаю понятна
Проверить состояние соединения можно с помощью метода
bool Connected();
который возвращает true, если в данный момент объект имеет содинение с БД.
IBPP активно использует исключения для отработки ошибок, поэтому всю работу следует делать внутри блоков try/catch. Иерархию классов исключений можно посмотреть в исходниках.
Все рассматриваемые нами объекты IBPP являются "умными указателями", поэтому явное удаление не требуется.
При компиляции программы использующей IBPP нужно указывать, с какой платформой мы работаем. Делается это с помощью дерективы препроцессора IBPP_LINUX.
Для выполненения SQL-запроса нужно создать транзакцию. Сам SQL-запрос выполняется с помощью запроса(Statement), во как
Итак, пример:
В первой строке создается объект транзакции с параметрами по-умолчанию:
* способ доступа - WRITE (чтение/запись);
* уровень изоляции - ilConcurrency (близкое соответсвие Repeatable Read. Все операции в транзакции с данным уровнем изоляции видят только те данные, которые существовали (committed) на момент старта этой транзакции, даже если они впоследствии были изменены или удалены другими транзакциями);
* способ разрешения блокировок - WAIT (транзакция будет ожидать, пока заблокированные строки не будут освобождены)
Конечно, все параметры можно задать явно. Возможно одновременное существование нескольких транзакций в одном соединении.
Во второй строке транзакция запускается.
Далее создается запрос (Statement).
Метод Execute выполняет запрос. С помощью метода Fetch извлекаются строки результирующих данных. Метод Get ивлекает значения столбца.
После извлечения данных транзакцию нужно закрыть.
Вот и все ! SQL-запрос выполнен, данные из БД у вас в программе.
Однако, такие простые SQL-запросы в жизни мало применимы. Рассмотрим теперь, как использовать параметризированные запросы.
Все очень просто. В тексте SQL-запроса параметры обозначаются знаком вопроса. Потом запрос подготавливается (Prepare) и значения параметров подставляются методом Set(). Пример:
Строки
Если вы переходите с Windows на Linux, неприятным сюрпризом будет не совпадение кодировок. Обычно данные в Firebird хранятся в CP1251, а в клиентской программе они нужны в UTF-8. Для изменения кодировки существует стандартная библиотека iconv, функция перекодировки получается совсем не сложной и универсальной.
Итого
IBPP - очень удобная и легкая библиотека для разработки кроссплатформенных C++ классов для работы с СУБД Firebird.
Литература:
1) http://www.ibpp.org/reference/
2) Борри Х. Firebird: Руководство разработчика баз данных
3) Кузьменко Д. Транзакции в InterBase и Firebird http://www.ibase.ru/devinfo/ibtrans.htm
Использование IPBB
Введение
В мире открытых исходников есть множество хороших мультиплатформенных инструментов. Сегодня мы рассмотрим один из них - IBPP, библиотеку для доступа к СУБД Firebird/Interbase.
Что такое IBPP
IBPP - это библиотека для доступа к СУБД Firebird/InterBase, набор С++ классов для работы со стандартной клиентской библиотекой.
Лицензия
IBPP распростроняется по лицензии IBPP License v1.1, которая разрешает использование, модификацию и распространение. Текст лицензии очень короткий, и желающие могут ознакомится с ним на сайте проекта или прочесть файл license.txt.
Установка IBPP
Есть несколько вариантов использования IBPP:
1. Самый простой вариант - включить в проект все .cpp файлы. Этот вариант ввиду простоты и очевидности мы рассматривать не будем.
2. Собрать библиотеку. Динамическую, статическую и т.д., вы выбираете сами. Компилируете тоже сами, никаких скриптов или make-файлов нет.
Я, под Windows собираю библиотеку статической линковки, под Linux - библиотеку динамической загрузки.
Для сборки под Windows воспользуйтесь вашей любимой IDE. Для Linux придется написать небольшой make-файл.
Код: Выделить всё
## Makefile
## Сборка IBPP в библиотеку
CC = g++
SOURCES = array.cpp blob.cpp database.cpp date.cpp dbkey.cpp _dpb.cpp events.cpp exception.cpp _ibpp.cpp _ibs.cpp _rb.cpp row.cpp service.cpp _spb.cpp statement.cpp time.cpp _tpb.cpp transaction.cpp user.cpp
OBJECTS = $(SOURCES:.cpp=.o)
CFLAGS = -DIBPP_LINUX -fPIC
all: $(OBJECTS)
$(CC) -shared -o libibpp.so -W1,-soname,libibpp.so $(OBJECTS) -lfbclient -lcrypt -lm -ldl -lpthread
$(OBJECTS): \
%.o: %.cpp ibase.h iberror.h _ibpp.h ibpp.h
$(CC) $(CFLAGS) -c -o $@ $<
clean:
rm -f *.o libibpp.so
Работа с БД
Работа с БД, обычно состоит из следующих шагов:
- подключение к БД
- выполнение SQL-запроса
- получение результатов
- закрытие соединения с БД
Итак, перейдем от слов к делу. Подключение к существующей БД с помощью IBPP осуществляется очень просто.
Код: Выделить всё
#include <ibpp/ibpp.h>
...
try
{
IBPP::Database db = IBPP::DatabaseFactory("myserver", "/data/db.fdb", "username", "password");
db->Connect();
...
db->Disconnect();
}
catch (IBPP::Exception& e)
{
std::cout << e.ErrorMessage();
}
Проверить состояние соединения можно с помощью метода
bool Connected();
который возвращает true, если в данный момент объект имеет содинение с БД.
IBPP активно использует исключения для отработки ошибок, поэтому всю работу следует делать внутри блоков try/catch. Иерархию классов исключений можно посмотреть в исходниках.
Все рассматриваемые нами объекты IBPP являются "умными указателями", поэтому явное удаление не требуется.
При компиляции программы использующей IBPP нужно указывать, с какой платформой мы работаем. Делается это с помощью дерективы препроцессора IBPP_LINUX.
Для выполненения SQL-запроса нужно создать транзакцию. Сам SQL-запрос выполняется с помощью запроса(Statement), во как
Итак, пример:
Код: Выделить всё
...
IBPP::Transaction tr = IBPP::TransactionFactory(db);
tr->Start();
...
std::string fn;
std::string ln;
IBPP::Statement st = IBPP::StatementFactory(db, tr);
st->Execute("SELECT firstname, lastname FROM sometable ORDER BY lastname");
while (st->Fetch())
{
st->Get(1, fn);
st->Get(2, ln);
std::cout << fn.c_str() << " - " << ln.c_str() << "\n";
}
...
tr->Commit(); // Or tr->Rollback();
...
* способ доступа - WRITE (чтение/запись);
* уровень изоляции - ilConcurrency (близкое соответсвие Repeatable Read. Все операции в транзакции с данным уровнем изоляции видят только те данные, которые существовали (committed) на момент старта этой транзакции, даже если они впоследствии были изменены или удалены другими транзакциями);
* способ разрешения блокировок - WAIT (транзакция будет ожидать, пока заблокированные строки не будут освобождены)
Конечно, все параметры можно задать явно. Возможно одновременное существование нескольких транзакций в одном соединении.
Во второй строке транзакция запускается.
Далее создается запрос (Statement).
Метод Execute выполняет запрос. С помощью метода Fetch извлекаются строки результирующих данных. Метод Get ивлекает значения столбца.
После извлечения данных транзакцию нужно закрыть.
Вот и все ! SQL-запрос выполнен, данные из БД у вас в программе.
Однако, такие простые SQL-запросы в жизни мало применимы. Рассмотрим теперь, как использовать параметризированные запросы.
Все очень просто. В тексте SQL-запроса параметры обозначаются знаком вопроса. Потом запрос подготавливается (Prepare) и значения параметров подставляются методом Set(). Пример:
Код: Выделить всё
...
IBPP::Statement st = IBPP::StatementFactory(db, tr);
st->Prepare("SELECT firstname, lastname FROM sometable where id = ?");
st->Set(1, param);
st->Execute();
...
Если вы переходите с Windows на Linux, неприятным сюрпризом будет не совпадение кодировок. Обычно данные в Firebird хранятся в CP1251, а в клиентской программе они нужны в UTF-8. Для изменения кодировки существует стандартная библиотека iconv, функция перекодировки получается совсем не сложной и универсальной.
Итого
IBPP - очень удобная и легкая библиотека для разработки кроссплатформенных C++ классов для работы с СУБД Firebird.
Литература:
1) http://www.ibpp.org/reference/
2) Борри Х. Firebird: Руководство разработчика баз данных
3) Кузьменко Д. Транзакции в InterBase и Firebird http://www.ibase.ru/devinfo/ibtrans.htm
Re: Жив ли IBPP?
спасибо, добавил ссылки на пост со страниц Компоненты и Документация