是什么:"启用autoCommit时无法提交"错误意味着什么?

Lar*_*rry 5 database postgresql

在我的程序中,我在池中有几个线程,每个线程都尝试写入数据库.创建的线程数是动态的.当创建的线程数只有一个时,一切正常.但是,当有多线程执行时,我收到错误:

org.apache.ddlutils.DatabaseOperationException: org.postgresql.util.PSQLException: Cannot commit when autoCommit is enabled.

我猜,也许因为每个线程并行执行,两个线程正在尝试同时写入并给出此错误.

您是否认为是这种情况,如果不是,可能导致此错误的原因是什么?

否则,如果我说的是问题,我可以做些什么来解决它?

Fem*_*emi 9

在您的jdbc代码中,您应该在获取连接后立即关闭自动提交.像这样的东西:

DataSource datasource = getDatasource(); // fetch your datasource somehow
Connection c = null;
try{
  c = datasource.getConnection();
  c.setAutoCommit(false);
Run Code Online (Sandbox Code Playgroud)

  • 当然。自动提交是一种数据库连接设置,只要执行DML语句(UPDATE,INSERT或DELETE),它就会自动开始并提交数据库事务。这简化了某些编程任务,并减少了简单数据库操作所需的样板。但是,如果您正在运行多个从属语句,并且想要确保它们全部成功(即,如果其中任何一个失败或引发异常,那么它们都不生效),则需要关闭自动提交并手动开始/提交事务您自己,这也更有效率。 (2认同)