2010-11-09 78 views
0

事务如何表现;如果我使用使用单java.sql.Statement在单个java.sql.Statement上执行多个DML

String sqlStr = "INSERT INTO.... \n update t1 set...."; 

statemet.execute(sqlStr); 

以下语法执行多个DML我不改变默认的连接设置(自动提交= TRUE)。

我知道这不是正确的方法/最佳实践;只是好奇地知道以上代码的事务性质 也就是说,如果更新失败,并且SQLException会插入回滚?

回答

1

由于autocommit设置为true,所以单个语句很可能在他们自己的单个事务中执行。这可能取决于数据库,但我不怀疑。

找出答案的最佳方法就是尝试一下。

0

试用,得到了与MS SQL一些令人惊讶的结果断绝2008

我试过2个更新语句按观察他们在一个事务中运行;即如果第二次更新失败,第一次更新语句被回滚。

我发现令人吃惊的是:

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

+0

在这种情况下,您可以通过使用SET XACT_ABORT使SQL Server回滚以前的语句(或不是):http://msdn.microsoft.com/en-us/library/ms188792.aspx – 2010-11-10 11:14:14

0

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

相关问题