У меня есть код, похожий на простой пример ниже, который пытается откатить запись в базу данных при возникновении ошибки. Однако похоже, что половина данных остается в базе данных, а не удаляется / откатывается.
statement->setAutoCommit(false);
statement->setMaxIterations(3);
int counter = 1;
try
{
statement->setInt(1, 1);
statement->addIteration();
statement->setInt(1, 2);
statement->addIteration();
statement->setInt(1, 3);
statement->executeUpdate();
statement->setInt(1, 4);
statement->addIteration();
statement->setInt(1, 2); // ERROR HERE (Unique constraint)
statement->addIteration();
statement->setInt(1, 6);
statement->executeUpdate();
connection->commit();
}
catch (oracle::occi::SQLException ex)
{
connection->rollback();
connection->terminateStatement(statement);
throw DatabaseException(ex.what());
}
Если я получаю сообщение об ошибке Oracle, я хочу откатить текущую транзакцию, чтобы не было записано НИКАКИХ строк. Однако, похоже, это не работает должным образом.
У меня есть запись, которая не выполняется на полпути, и она не может успешно откатить строки. Я получаю половину данных, записанных в базу данных.
Я что-то упустил с командой setAutoCommit(false)
и connection->rollback()
?
commit
выполнять операторы после последнего оператора? Насколько мне известно, изменения становятся постоянными в БД только после выполнения оператораcommit
. - person Rohith   schedule 25.09.2014