当前位置:Gxlcms > 数据库问题 > Jdbc来操作事物 完成模拟银行的转账业务

Jdbc来操作事物 完成模拟银行的转账业务

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

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来操作事物 完成模拟银行的转账业务

标签:zha   catch   back   zhang   ati   money   set   getpath   ret   

人气教程排行