Здравствуйте, nen777w, Вы писали:
N>Посмотрел. Твоя мощнее.
Спасибо, я думал, наоборот, попроще
N>Вероятно буду твою использовать. Как у тебя с лицензией для комерческих продуктов?
Boost Software License. Можно использовать в коммерческих продуктах без ограничений.
N>И ещё хотелось бы больше примеров кода например для query или transactions.
Можно посмотреть на примеры использования в тестах.
query — просто вспомогательный класс для хранения текста SQL запроса и привязок к переменным. Надобность в непосредственном использовании query у меня пока не возникала, все делал через into и use
![](/Forum/Images/smile.gif)
Но вообще, можно, конечно, и через query:
statement st(db);
query q;
// задаем SQL
q.sql("select id, name from some_table where id > :id");
// явно привязываем переменные
int id = 3;
string name;
// создаем привязки к переменным вручную Ж-[]
// кхм. далее могут быть опечатки. писал в форме редактирования сообщения
q.put(into_binder_ptr(new into_pos_binder<int>(id))); // к столбцу id
q.put(into_binder_ptr(new into_pos_binder<string>(name))); // к солбцу name
q.put(use_binder_ptr(new use_pos_binder<int>(id))); // к параметру id
// задаем query для statement
// способ немного извращенный. т.к. query - некопируемый класс
// при этом разрушается query, который был в st.
swap(st.q(), q);
while ( st.exec() )
{
std::cout << id << ' ' << name << std::endl;
}
Это просто более многословная запись такого:
statement st(db);
int id = 3;
string name;
st << "select id, name from some_table where id > :id", into(id), into(name), use(id);
while ( st.exec() )
{
std::cout << id << ' ' << name << std::endl;
}
Транзакции — это объекты, обычно на стеке. Конструктор начинает транзакцию, деструктор делает rollback, если не было явного commit. Вложенные транзакции не поддерживаются, у класса session есть функция active_txn(), которая возвращает указатель на текущую транзакцию (или 0, если используется режим auto commit)
session db("mega.db");
// db.active_txn() == 0
{
// стартуем транзакцию
transaction txn(db);
// db.active_txn() == &txn;
db << "insert into blah-blah-blah";
// txn.commit(); // делаем явный commit
} // при разрушении txn произойдет rollback, если не был вызван txn.commit()
// транзакция завершена
// db.active_txn() == 0