1. 程式人生 > 其它 >javaweb學習26:複習JDBC事務

javaweb學習26:複習JDBC事務

javaweb學習26:JDBC事務

  • 事務:

    • 要麼都成功,要麼都失敗;

    • ACID原則:保證資料的安全

    • 事務的狀態:

      開啟事務
      事務提交:commit()
      事務回滾:rollback()
      關閉事務

         
      轉賬:
      A:1000
      B:1000
         
        結果: A(900) --100--> B(1100)
         
      事務:
         A:SQL:1000-100
         B:SQL:1000+100
         把這一組SQL放在一個事務中,要麼都成功,要麼都失敗;

       

  • Junit單元測試:

    • 依賴:

      <!--單元測試-->
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.12</version>
      </dependency>
    • 使用:

      • @Test註解只有在方法上有效,只要加了這個註解的方法,就可以直接執行!

      @Test
      public void test(){
         System.out.println("Hello");
      }

       

  • 程式碼案例:A給B轉賬:測試事務

    /**
    * 測試事務
    */
    public class TestJDBC3 {

       @Test
       public void test() {

           //配置資訊
           String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
           String username="root";
           String password="root";
           Connection conn =null;

           try {
               //1,載入驅動
               Class.forName("com.mysql.jdbc.Driver");

               //2,建立連線:
               conn = DriverManager.getConnection(url, username, password);
               //3,通知資料庫開啟事務
               conn.setAutoCommit(false);//fasle是開啟

               //3,編寫SQL
               String sql1="update account set money=money-100 where name='A'";
               conn.prepareStatement(sql1).executeUpdate();

               int j=1/0;  //製造錯誤

               String sql2="update account set money=money+100 where name='B'";
               conn.prepareStatement(sql2).executeUpdate();

               conn.commit();//以上2條SQL都執行成功了, 就提交事務!
               System.out.println("SQL執行成功");

          } catch (Exception e) {
               e.printStackTrace();
               try {
                   //SQL執行失敗,就回滾事務
                   conn.rollback();
              } catch (SQLException ex) {
                   ex.printStackTrace();
              }
          }finally {
               try {
                   //6,關閉連線
                   conn.close();
              } catch (SQLException e) {
                   e.printStackTrace();
              }
          }
      }
    }