[Autocommit true是指在每个语句之后提交-未链接:事务不是全部在一个可以提交并作为一个回滚的“链”中。
所以您可能会被卡住。如果您无法更改该SP,则它将始终关闭链接模式。您收到一条合理的消息。它实际上是错误消息,还是仅仅是您的jdbc代码不处理它(即显示它或不显示它,但至少将其视为不是错误?)
我正在编写一个Java应用程序,它需要执行一些复杂的SQL并在所有应用程序失败的情况下将其全部回退:
net.sourceforge.jtds.jdbc.Driver
打开Sybase连接EXEC sp_procxmode 'dbo.MySP1','unchained'
完成此操作后,我从MySP1中收到以下错误:
存储过程'MySP1'只能在未链接的事务模式下运行。 '
SET CHAINED OFF
'命令将导致当前会话使用未链接的事务模式。
我尝试了以下操作,但都无济于事:
向传递给getConnection()
方法(advice source)的Properties对象添加“ chained = false”。
这没有效果,很可能是因为在我看来net.sourceforge.jtds.jdbc.Driver
确实支持[[0]]属性。
chained
方法(getConnection()
)的URL字符串添加“ chained = false”。这也没有效果
SET CHAINED OFF
SQL:setAutoCommit()
这无效。
PreparedStatement st = conn.prepareStatement("SET CHAINED OFF");
st.execute();
的工作原理这使我相信可能存在setAutoCommit()
。但是,在这种情况下,#1-#3应该已经解决了该错误]]] >>
setAutoCommit(true)
。这解决了有关取消链接模式的错误,但是据我所知,这意味着我最后无法回滚100%的SQL,因为到那时为止,第一个SQL语句已经被自动提交了。
] >我正在编写一个Java应用程序,该应用程序需要执行一些复杂的SQL并在失败时全部回滚:使用net.sourceforge.jtds.jdbc.Driver打开Sybase连接调用setAutoCommit(false)做...] >
[Autocommit true是指在每个语句之后提交-未链接:事务不是全部在一个可以提交并作为一个回滚的“链”中。
所以您可能会被卡住。如果您无法更改该SP,则它将始终关闭链接模式。您收到一条合理的消息。它实际上是错误消息,还是仅仅是您的jdbc代码不处理它(即显示它或不显示它,但至少将其视为不是错误?)
我偶然发现了同一案子。您与方法3非常接近。但在这种情况下,jTDS不会启动tran(但是在Unchained模式下是必需的)。您可以通过执行
setAutoCommit(false)
刚跑步后
begin transaction
[Autocommit true是指在每个语句之后提交-未链接:事务不是全部在一个可以提交并作为一个回滚的“链”中。
所以您可能会被卡住。如果您无法更改该SP,则它将始终关闭链接模式。您收到一条合理的消息。它实际上是错误消息,还是仅仅是您的jdbc代码不处理它(即显示它或不显示它,但至少将其视为不是错误?)
我偶然发现了同一案子。您与方法3非常接近。但在这种情况下,jTDS不会启动tran(但是在Unchained模式下是必需的)。您可以通过执行
setAutoCommit(false)
刚跑步后