使用 java 处理 Postgresql 事务
我有两个带有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();
这是第二个:
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();
现在我想用事务 BEGIN 来执行它们;并提交; 如何使用preparedStatement处理事务?
I have two blocks of queries with preparedStatement.
This is the first:
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();
And this is the second:
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();
Now I want to execute them with the transaction BEGIN; and COMMIT;
How can I handle transaction with preparedStatement?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该使用
连接.setAutoCommit(false)
禁用自动提交和Connection.commit()
和
Connection.rollback()
。禁用自动提交后,第一次执行需要事务的命令或查询时,事务将自动启动。
您不应该使用数据库特定的事务控制命令,因为驱动程序很可能在发出 commit() 或 rollback() 时对资源进行额外的清理。
You should use
Connection.setAutoCommit(false)
to disable auto-commit andConnection.commit()
andConnection.rollback()
.When auto-commit is disabled, a transaction will be started automatically the first time you execute a command or query that requires a transaction.
You should not be using the database specific transaction control commands, as the driver will most likely do additional cleanup of resources when a commit() or rollback() is issued.
将自动提交设置为 false。
将您的PreparedStatements 放入try 块中。最后承诺;在 catch 块中回滚。
这就是通常在简单的 JDBC 中完成的方式。
http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html< /a>
如果您使用 EJB3 或 Spring,您可以添加事务管理器并以声明方式指定它们。这更加复杂和灵活。
Set auto commit to false.
Put your PreparedStatements in a try block. Commit at the end; rollback in the catch block.
That's how it's usually done in bare bones JDBC.
http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html
If you use EJB3 or Spring you can add a transaction manager and specify them declaratively. That's more sophisticated and flexible.