Jdbc來操作事物 完成模擬銀行的轉賬業務
阿新 • • 發佈:2019-04-03
void where ace per use stat zhang ger 正常
創建JDBC工具類
1 package cn.aa4_2.JDBCUtils; 2 3 4 import java.io.FileReader; 5 import java.io.IOException; 6 import java.net.URL; 7 import java.sql.*; 8 import java.util.Properties; 9 10 /** 11 * JDBC工具類 12 */ 13 public class JDBCUtils { 14 private static String url; 15 privatestatic String user; 16 private static String password; 17 private static String driver; 18 //文件的讀取 讀取一次拿到所有值 19 static { 20 21 try { 22 //讀取資源文件 獲取值 創建Properties集合類 23 Properties pro=new Properties(); 24 //獲取src的路徑 ClassLoader 類加載器 25 ClassLoader cl= JDBCUtils.class.getClassLoader(); 26 URL res = cl.getResource("jdbc.properties"); 27 String path = res.getPath(); 28 pro.load(new FileReader(path)); 29 url=pro.getProperty("url"); 30 user=pro.getProperty("user"); 31 password=pro.getProperty("password");32 driver=pro.getProperty("driver"); 33 } catch (IOException e) { 34 e.printStackTrace(); 35 } 36 37 } 38 //獲取連接對象 39 public static Connection getConnection() throws SQLException { 40 return DriverManager.getConnection(url,user,password); 41 } 42 //釋放資源 43 public static void colse(Statement state,Connection con){ 44 if (state!=null){ 45 try { 46 state.close(); 47 } catch (SQLException e) { 48 e.printStackTrace(); 49 } 50 } 51 if (con!=null){ 52 try { 53 con.close(); 54 } catch (SQLException e) { 55 e.printStackTrace(); 56 } 57 } 58 } 59 //釋放資源 60 public static void colse(ResultSet rs,Statement state, Connection con){ 61 if (rs!=null){ 62 try { 63 rs.close(); 64 } catch (SQLException e) { 65 e.printStackTrace(); 66 } 67 } 68 if (state!=null){ 69 try { 70 state.close(); 71 } catch (SQLException e) { 72 e.printStackTrace(); 73 } 74 } 75 if (con!=null){ 76 try { 77 con.close(); 78 } catch (SQLException e) { 79 e.printStackTrace(); 80 } 81 } 82 } 83 84 }
模擬銀行的轉賬業務的實現步驟和代碼如下
1 獲取鏈接
2 開啟事物
3 獲取PreparedStatement
4 使用PreparedStatement 兩次更新操作
5 正常情況下提交事物
6 出現異常 回滾事物
1 package cn.aa4_2.Demo; 2 3 import cn.aa4_2.JDBCUtils.JDBCUtils; 4 5 import java.sql.Connection; 6 import java.sql.PreparedStatement; 7 import java.sql.SQLException; 8 9 /** 10 * 模擬銀行的轉賬業務 11 */ 12 public class Transactionthree { 13 public static void main(String[] args) { 14 Connection con=null; 15 PreparedStatement pre=null; 16 try { 17 //獲取連接 18 con = JDBCUtils.getConnection(); 19 //開啟事物 20 con.setAutoCommit(false); 21 //獲取PreparedStatement 22 pre = con.prepareStatement("UPDATE coount SET money=money-? WHERE cname=?"); 23 //更新操作 24 pre.setDouble(1,1); 25 pre.setString(2,"wang"); 26 pre.executeUpdate(); 27 pre = con.prepareStatement("UPDATE coount SET money=money+? WHERE cname=?"); 28 pre.setDouble(1,1); 29 pre.setString(2,"zhang"); 30 pre.executeUpdate(); 31 //提交事物 32 con.commit(); 33 System.out.println("轉賬成功"); 34 } catch (SQLException e) { 35 try { 36 //事物回滾 37 con.rollback(); 38 } catch (SQLException e1) { 39 e1.printStackTrace(); 40 } 41 System.out.println("轉賬失敗"); 42 }finally { 43 //關閉資源 44 JDBCUtils.colse(pre,con); 45 } 46 } 47 }
7 關閉資源
Jdbc來操作事物 完成模擬銀行的轉賬業務