Glassfish:"非交易设置" JDBC池中的选项

时间:2015-02-02 00:08:54

标签: java postgresql jdbc glassfish glassfish-4

在Glassfish中,有一个名为

的JDBC Pool选项
  

非交易连接

所以我认为"非交易连接"与设置auto-commit = false?

相同

如果这是正确的,那么为什么,当此选项禁用(即启用非事务性)时,我会收到错误消息

  

org.postgresql.util.PSQLException:启用autoCommit时无法提交。

这时我的java代码如下所示:

try {
preparedStatement = connection.prepareStatement(.....);
preparedStatement.executeQuery();
connection.commit();
}

1 个答案:

答案 0 :(得分:1)

非事务性连接默认情况下不将autoCommit属性设置为false。这不是非事务性连接的用途。从下面的Oracle glassfish文档中,

  

使用非事务性连接的主要优点是避免了在事务上下文中登记和除名连接所产生的开销。但是,请仔细使用此类连接。例如,如果在正在进行修改数据库的事务时使用非事务性连接来查询数据库,则查询将检索数据库中未修改的数据。这是因为正在进行的事务尚未提交。再举一个例子,如果非事务性连接修改了数据库并且同时运行的事务回滚,则非事务性连接所做的更改不会回滚。

你应该

Connection con = ds.getConnection();
boolean initValue = con.getAutoCommit(); 
con.setAutoCommit(false);
//do your work here and commit or rollback
con.setAutoCommit(initValue );