创建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 关闭资源