官术网_书友最值得收藏!

7.4 JDBC高級應用——事務處理

事務處理由若干個步驟組成,所有步驟必須同時操作成功或者失敗。當所有的步驟都操作成功時,事務就算操作成功了;而當其中某一個步驟操作失敗時,則該步驟之前的操作就必須撤銷。例如,在一個銀行交易系統中,假如一個數據庫表用來存放客戶的存款金額,另一個數據庫表用來存放客戶的交易歷史。客戶進行交易操作的過程,就是一個典型的事務。當客戶取錢時,一方面要改變客戶的存款金額,另一方面要增加客戶的交易歷史記錄,要么都成功,要么都失敗,不能改變了客戶的存款金額,卻沒有任何交易記錄。

7.4.1 事務處理概述

事務的特性包括原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durabilily)。

● 原子性:表示事務是否完全完成,若因為任何原因導致其中的一個步驟操作失敗,則所有步驟都操作失敗,前面已經完成的步驟也必須回滾,系統將返回到事務開始前的狀態。

● 一致性:表示當事務執行失敗時,所有被該事務影響的數據都應該恢復到事務執行前的狀態。

● 隔離性:表示在事務執行過程中對數據的修改,在事務提交之前對其他事務是不可見的。

● 持久性:表示對數據的操作應該是持久性。

7.4.2 如何應用事務處理

要進行事務處理,就離不開事務的設定、開始事務、執行SQL、提交事務及事務失敗后的回滾。下面是一個典型的應用事務處理將數據新增到數據庫的過程;

      public void insert() throws Exception{
        //取得連接
        Class.forName("org.postgresql.Driver");
      String url ="JDBC:postgresql://localhost/ testDb "
      String user="postgres";
      String password=" postgres ";
      Connection conn= DriverManager.getConnection(url,user,password);
          try {
              //開始進行事務處理
              conn.setAutoCommit(false);
              Statement stmt = con.createStatement();
              String sql = "insert into user (username, password) values('" + username + "', '" + password + "')";
              //執行新增語句
              int counts = stmt.executeUpdate(sql);
              if (counts != 0) {
                  infoOut.put("msg", "新增成功");
              } else {
                  infoOut.put("msg", "新增失敗");
              }
              //事務提交
              con.commit();
          } catch (SQLException e) {
              e.printStackTrace();
          }  catch(Exception e){
              //事務回滾
              con.rollback();
              e.printStackTrace();
          } finally {
              //關閉連接
              con.close();
          }
      }
主站蜘蛛池模板: 科尔| 新乡市| 厦门市| 察隅县| 余庆县| 淅川县| 巴彦淖尔市| 呼玛县| 新和县| 公主岭市| 桃源县| 黄石市| 潞城市| 霍邱县| 通海县| 陵川县| 舒兰市| 濮阳市| 滦南县| 江阴市| 赣州市| 雷州市| 安顺市| 都江堰市| 崇文区| 玉环县| 军事| 屏南县| 旺苍县| 修文县| 大渡口区| 屯昌县| 芦山县| 盘山县| 育儿| 天祝| 米林县| 和平县| 蒙城县| 冀州市| 工布江达县|