【问题标题】:com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Can't call rollback when autocommit=truecom.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:autocommit=true 时无法调用回滚
【发布时间】:2010-10-12 05:42:29
【问题描述】:

我在我的应用程序中使用 Jboss5.0 和 mysql。并且会有很多并发操作,并且数据库包含大量记录。 这个错误经常出现..不时出现。

 com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:
 Can't call rollback when
 autocommit=true    at
 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888)
    at
 com.mysql.jdbc.Connection.rollback(Connection.java:5192)
    at
 org.jboss.resource.adapter.jdbc.local.LocalManagedConnection.rollback(LocalManagedConnection.java:97)
    at
 org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.tidyup(TxConnectionManager.java:783)
    at
 org.jboss.resource.connectionmanager.BaseConnectionManager2.returnManagedConnection(BaseConnectionManager2.java:453)
    at
 org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.connectionClosed(TxConnectionManager.java:734)
    at
 org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.closeHandle(BaseWrapperManagedConnection.java:362)
    at
 org.jboss.resource.adapter.jdbc.WrappedConnection.close(WrappedConnection.java:155)

谁能帮忙?

提前致谢

【问题讨论】:

标签: java mysql jdbc jboss


【解决方案1】:

您要么尝试在启用自动提交时调用回滚,要么您在数据库中使用不支持事务(以及回滚能力)的 MyISAM 类型表。

从堆栈跟踪判断,数据库事务失败,并且在尝试创建 SQLException 并回滚事务时,正在发生此异常。除非有更多的异常(比如在你的代码中什么地方触发了异常),否则我会冒险猜测它是由 MyISAM 表引起的。

【讨论】:

  • 我使用innodb,它支持事务。我有事务性和非事务性查询。
  • @Tamizh,您是否在代码中调用了 rollback(),如果是,您是否尝试过在这样做之前禁用自动提交?
  • 是的,每当我使用事务时,我首先将自动提交设置为 false。现在我发现它在 jboss 日志文件中以 WARN 的形式出现,而不是 ERROR。所以实际上这是一个警告,当连接丢失或长时间闪烁时我猜
猜你喜欢
  • 2020-11-22
  • 1970-01-01
  • 2016-03-07
  • 2017-08-14
  • 1970-01-01
  • 2019-07-28
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多