在单个java.sql.Statement上执行多个DML

时间:2010-11-09 18:24:20

标签: java jdbc

交易的行为方式;如果我使用以下语法使用单java.sql.Statement

执行多个DML
String sqlStr = "INSERT INTO.... \n update t1 set....";

statemet.execute(sqlStr);

我没有改变默认连接设置(autocommit = true)。

我知道这不是正确的方法/最佳实践;只是想知道上面代码的交易性质 也就是说如果使用SQLException更新失败,会插入回滚吗?

3 个答案:

答案 0 :(得分:1)

如果autocommit设置为true,那么单个语句很可能会在各自的事务中执行。这可能取决于数据库,但我怀疑不是。

最好的方法是尝试一下。

答案 1 :(得分:0)

尝试用MS SQL sever 2008获得了一些令人惊讶的结果

我尝试了2个更新语句,根据观察,它们在单个事务中运行;即如果第二次更新失败,则首先回滚更新语句。

我注意到的令人惊讶的事情是:

https://connect.microsoft.com/SQLServer/feedback/details/620522/invalid-object-exception-not-thrown-by-com-microsoft-sqlserver-jdbc-sqlserverdriver#

答案 2 :(得分:0)

我在MySQL环境中尝试过。它工作得很好。我认为这是这样做的基本方法。