使用java进行Postgresql事务处理

Zza*_*zap 7 java postgresql transactions commit prepared-statement

我有两个使用preparedStatement的查询块.

这是第一个:

String sql = "update cikan_malzeme set miktar = ? where proje_id = ? and malzeme_id = ?";
PreparedStatement prep = dbConnect.connection.prepareStatement(sql);
prep.setFloat(1, toplam);
prep.setInt(2, pid);
prep.setInt(3, mid);
prep.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

这是第二个:

String sql2 = "update malzemeler set miktar = ? where malz_adi = ?";
PreparedStatement prep2 = dbConnect.connection.prepareStatement(sql2);
prep2.setFloat(1, fark);
prep2.setString(2, malzemeadi);
prep2.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

现在我想用事务BEGIN执行它们; 和COMMIT; 如何使用preparedStatement处理事务?

提前致谢.

duf*_*ymo 8

将自动提交设置为false.

将PreparedStatements放在try块中.最后提交; 在catch块中回滚.

这就是它通常在裸机JDBC中完成的方式.

http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

如果使用EJB3或Spring,则可以添加事务管理器并以声明方式指定它们.这更加复杂和灵活.


Mar*_*eel 7

您应该使用Connection.setAutoCommit(false)禁用自动提交Connection.commit()Connection.rollback().

禁用自动提交时,第一次执行需要事务的命令或查询时,将自动启动事务.

您不应该使用特定于数据库的事务控制命令(因为在发出commit()或rollback()时,驱动程序很可能会执行额外的资源清理.