我对set chainedsetAutoCommit()方法中的net.sourceforge.jtds.jdbc.Driver语句有些困惑

source code说:

2161  if (serverType == Driver.SYBASE) {
2162            if (autoCommit) {
2163                sql.append("SET CHAINED OFF");
2164            } else {
2165                sql.append("SET CHAINED ON");
2166            }


但是,不应该倒退,并且autoCommit == false的链接应该为OFF吗?



我遇到这个问题的原因如下:

我正在编写一个Java应用程序,它需要执行一些复杂的SQL并在所有应用程序失败的情况下将其全部回滚:


使用net.sourceforge.jtds.jdbc.Driver打开Sybase连接
调用setAutoCommit(false)
做SQL1
调用存储的过程“ MySP1”


我无法控制存储的过程MySP1'
它有EXEC sp_procxmode 'dbo.MySP1','unchained'

做SQL2
如果SQL2失败,请回滚所有内容(包括SQL1),否则进行提交。


完成此操作后,我从MySP1中收到以下错误:

 Stored procedure 'MySP1' may be run only in unchained transaction mode. The 'SET CHAINED OFF' command will cause the current session to use unchained transaction mode.

最佳答案

我遇到了几乎相同的问题,并通过运行以下SQL解决了该问题。希望它可以帮助您。

sp_procxmode your_stored_Procedure, 'anymode'


在您的情况下,your_stored_Procedure = MySP1,则应运行以下代码:

 sp_procxmode MySP1, 'anymode'

关于java - net.sourceforge.jtds.jdbc.Driver中的setAutoCommit()中是否存在“设置链接”的错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10964365/

10-10 03:42