当前位置:Gxlcms > 数据库问题 > JDBC事务机制

JDBC事务机制

时间:2021-07-01 10:21:17 帮助过:8人阅读

概述

1、JDBC中的事务是自动提交的,只要执行任意一条DML语句就自动提交一次。
2、这是JDBC默认的事务行为,但是在实际的业务当中,通常都是N条DML语句共同联合才能完成的,必须保证他们这些DML语句在同一个事务中同时成功或者同时失败。

相关方法

1、void setAutoCommit(boolean autoCommit)
(java.sql.Connection)
将此连接的自动提交模式设置为给定状态。
autoCommit - true启用自动提交模式; false禁用它。
2、void commit()
(java.sql.Connection)
使自上次提交/回滚以来所做的所有更改都将永久性,并释放此Connection对象当前持有的任何数据库锁。只有当自动提交模式被禁用时,才应该使用此方法。
3、void rollback()
(java.sql.Connection)
撤消在当前事务中所做的所有更改,并释放此 Connection对象当前持有的任何数据库锁。只有当自动提交模式被禁用时,才应该使用此方法。

转账示例

  • 原数据
    技术图片
  • 代码
  1. <code class="language-java">import java.sql.*;
  2. import java.util.ResourceBundle;
  3. public class Demo {
  4. public static void main(String[] args) {
  5. ResourceBundle bundle = ResourceBundle.getBundle("jdbc.info");
  6. String driver = bundle.getString("driver");
  7. String url = bundle.getString("url");
  8. String user = bundle.getString("user");
  9. String password = bundle.getString("password");
  10. Connection conn = null;
  11. PreparedStatement pstmt = null;
  12. try{
  13. Class.forName(driver);
  14. conn = DriverManager.getConnection(url, user, password);
  15. /*将自动提交机制改为手动提交*/
  16. conn.setAutoCommit(false);
  17. String sql = "update t_act set balance=? where actno=?";
  18. pstmt = conn.prepareStatement(sql);
  19. pstmt.setDouble(1,10000);
  20. pstmt.setInt(2,111);
  21. int count = pstmt.executeUpdate();
  22. pstmt.setDouble(1,10000);
  23. pstmt.setInt(2,222);
  24. count += pstmt.executeUpdate();
  25. System.out.println(count==2 ? "转账成功" : "转账失败");
  26. /*程序到这儿证明没有异常,
  27. 事务结束,手动提交*/
  28. conn.commit();
  29. }catch (SQLException | ClassNotFoundException e){
  30. /*回滚事务*/
  31. if (conn != null) {
  32. try {
  33. conn.rollback();
  34. } catch (SQLException throwables) {
  35. throwables.printStackTrace();
  36. }
  37. }
  38. e.printStackTrace();
  39. }finally {
  40. if (pstmt != null) {
  41. try {
  42. pstmt.close();
  43. } catch (SQLException e) {
  44. e.printStackTrace();
  45. }
  46. }
  47. if (conn != null) {
  48. try {
  49. conn.close();
  50. } catch (SQLException e) {
  51. e.printStackTrace();
  52. }
  53. }
  54. }
  55. }
  56. }
  57. </code>

技术图片
技术图片

JDBC事务机制

标签:exception   where   技术   必须   ati   插入   http   相关   rest   

人气教程排行