Несколько запросов к БД в рамках одной транзакции
Как правильно выполнить запросы в рамках одной транзакции?
db->getDatabase().transaction();
QString str_error;
QSqlQuery qry;
//** 1
qry.prepare("INSERT ...");
if (qry.exec())
str_error = str_error + qry.lastError().text();
//** 2
qry.prepare("INSERT ...");
if (qry.exec())
str_error = str_error + qry.lastError().text();
//** 3
qry.prepare("INSERT ...");
if (qry.exec())
str_error = str_error + qry.lastError().text();
if (str_error.isEmpty())
db->getDatabase().commit();
else
db->getDatabase().rollback();
... к примеру если во втором запросе ошибка, то в любом случае выполняются 1 и 3.
Ответы (1 шт):
Автор решения: alex
→ Ссылка
Нашел ответ.
QString str_error;
QSqlQuery qry;
bool success = true;
try {
qry.prepare("INSERT ...");
if (!qry.exec()) {
str_error = str_error + qry.lastError().text();
success = false;
}
qry.prepare("INSERT ...");
if (!qry.exec()) {
str_error = str_error + qry.lastError().text();
success = false;
}
qry.prepare("INSERT ...");
if (!qry.exec()) {
str_error = str_error + qry.lastError().text();
success = false;
}
if (success)
db->getDatabase().commit();
else
db->getDatabase().rollback();
}
catch (...) {
db->getDatabase().rollback();
throw;
}