/**异常:程序在运行过程中的特殊情况
 *  1)受检异常:(要求程序必须捕获或者声明抛出异常。)
 *      放在方法和参数的后面,用throws声明,
 *  2)运行时异常:(默认情况下会得到自动处理,所以不用通常捕获。)
 *      算术异常、类型转换异常、数组下标越界、空指针异常、输入不匹配异常
 *  当语句可能存在异常时,try{异常语句} catch(){隔离异常}
 * 多重catch:需要考虑异常的子父类关系 子类在上 父类在下
 * 执行顺序:try语句块->相应的catch语句块-->finally语句块-->执行到最后
 */
  1 public class UnusualTest {  2     private  static ThreadLocaltl = new ThreadLocal<>();  3     private  static DataSource dataSource;  4     //连接数据库  5     public  static Connection getConnection(){  6         Connection conn = null;  7         //当语句可能存在异常时,try{异常语句} catch(){隔离异常}  8         try {  9             conn = tl.get(); 10             if(conn==null){ 11                 conn = dataSource.getConnection(); 12                 tl.set(conn); 13             } 14         } catch (SQLException e) { 15             e.printStackTrace(); 16         } 17         return  conn; 18     } 19     //断开数据库 20     public static void closeAll(AutoCloseable... cs){ 21         for(AutoCloseable c : cs){ 22             if(c!=null){ 23                 try { 24                     c.close(); 25                 } catch (Exception e) { 26                     e.printStackTrace(); 27                 } 28             } 29         } 30     } 31     //开启事务 32     public static  void begin(){ 33         Connection conn = getConnection(); 34         try { 35             conn.setAutoCommit(false); 36         } catch (SQLException e) { 37             e.printStackTrace(); 38         } 39     } 40     //提交事务 41     public static void commit(){ 42         Connection conn = getConnection(); 43         try { 44             conn.commit(); 45         } catch (SQLException e) { 46             e.printStackTrace(); 47         } 48         closeAll(conn); 49         tl.remove(); 50     } 51     //事务回滚 52     public static  void rollback(){ 53         Connection conn = getConnection(); 54         try { 55             conn.rollback(); 56         } catch (SQLException e) { 57             e.printStackTrace(); 58         } 59         closeAll(conn); 60         tl.remove(); 61     } 62 }