我对set chained
中setAutoCommit()
方法中的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/