1. 程式人生 > >Jdbc來操作事物 完成模擬銀行的轉賬業務

Jdbc來操作事物 完成模擬銀行的轉賬業務

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     private
static 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來操作事物 完成模擬銀行的轉賬業務