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