我们正在尝试修复测试工具上的一些问题,并且遇到特定测试的问题,基本上测试创建实体的功能,进行一些处理并将其存储在数据库中(是的,CRUD中的C)
在fitnesse测试的tearDown部分,我们对该记录执行delete语句。但是,没有任何内容被删除。
我们怀疑这可能是因为在SUT
提交事务之前执行了tearDown。因此,没有什么可以删除。
为了尝试解决这个问题,我们正在制作一个可轮询的jdbc delete:
java.sql.Statement statement;
/*creates a statement*/
do{
recordsDeleted = statement.executeUpdate("delete...");
Thread.sleep(INTERVAL);
}while(recordsDeleted == 0);
所以问题出现了:
在上面的代码中,更新是在同一个事务上执行的,还是会为do-while循环的每次迭代创建一个新的事务? (我倾向于认为它们将在同一个交易中执行,因为java.sql.Connection
包含commit
,rollback
,etc
方法。
提前致谢
答案 0 :(得分:1)
我最初没有看到你的循环有什么问题。你正在某处调用statement.close()
吗?我假设SUT
在另一个线程或远程?您确定删除条件与输入匹配吗?您是否可以在另一个进程中检查数据库以查看创建是否将其发送到数据库?
就交易而言,它取决于数据库,但通常默认情况下没有交易。通常,启用自动提交,以便立即执行和提交每个单独的语句。如果想要启用事务,则需要禁用自动提交,然后调用databaseConnection.setSavePoint()
。调用commit()
时将提交事务。如果连接已关闭(或rollback()
已调用),则回滚事务。