我有类似于下面的简单示例的代码,它试图在发生错误时回滚数据库写入。但是,一半的数据似乎保留在数据库中,而不是被删除/回滚。
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)
andconnection->rollback()
命令的内容?