有没有在的setAutoCommit()在net.sourceforge.jtds.jdbc.Dri

2019-10-16 20:19发布

我有一些困惑与set chained中声明setAutoCommit()的方法net.sourceforge.jtds.jdbc.Driver

该源代码表示:

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

然而, 应该不会是倒退,并链接应该关闭自动提交==假的?


我碰到这种情况的原因如下:

我正在写一个Java应用程序,它需要做一些复杂的SQL和回滚所有的它,如果任何的失败:

  • 使用打开Sybase连接net.sourceforge.jtds.jdbc.Driver

  • 打电话的setAutoCommit(假)

  • 做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.

Answer 1:

我几乎同样的问题,通过运行下面的SQL解决它。 希望它可以帮助你。

sp_procxmode your_stored_Procedure, 'anymode'

你的情况your_stored_Procedure = MySP1那么你应该运行下面的代码:

 sp_procxmode MySP1, 'anymode'


文章来源: Is there a bug with “set chained” in setAutoCommit() in net.sourceforge.jtds.jdbc.Driver?