标签:返回 false 一个 class exception throw create 保存 ==
1 package jdbc; 2 3 import com.mchange.v2.c3p0.ComboPooledDataSource; 4 5 import java.sql.Connection; 6 import java.sql.SQLException; 7 8 /** 9 * Created by Mac on 10/09/2017. 10 * 11 * @kong 12 */ 13 public class JdbcUtils { 14 //配置文件的默认配置,要求你必须给出从c3p0-config.xml 15 private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); 16 17 //事务专用连接 18 private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>(); 19 20 //使用连接池返回一个连接对象 21 public static Connection getConnection() throws SQLException { 22 Connection con = tl.get(); 23 //当con不等于null,说明已经调用过beginTransaction(),表示开启了事务 24 if(con != null)return con; 25 return dataSource.getConnection(); 26 } 27 //返回连接池对象 28 public static ComboPooledDataSource getDataSource() { 29 return dataSource; 30 } 31 /* 32 * 开启事务 33 * 1、获取一个Connection,设置它的setAutoCommit(false) 34 * 2、还要保证dao中使用的连接是我们刚刚创建的 35 * ------------ 36 * 1、创建一个Connection,设置为手动提交 37 * 2、把这个Connection给dao用 38 * 3、还要让commitTransaction或rollbackTransaction可以获取到 39 * */ 40 public static void beginTransaction() throws SQLException { 41 Connection con = tl.get(); 42 if (con != null) throw new SQLException("已经开启了事务,就不要重新开启了"); 43 /* 44 * 1、给con赋值 45 * 2、给con设置为手动提交 46 * */ 47 con = getConnection();//给con赋值,表示事务已经开始了 48 con.setAutoCommit(false); 49 50 tl.set(con);//把当前线程的连接保存起来 51 } 52 /* 53 * 提交事务 54 * 1、获取beginTransaction提供的Connection,然后调用Commit()方法 55 * */ 56 public static void commitTransaction() throws SQLException { 57 Connection con = tl.get();//获取氮气线程的专用连接 58 if (con == null) throw new SQLException("还没有开启事务,不能提交!"); 59 /* 60 * 1、直接使用con.commit() 61 * */ 62 con.commit(); 63 con.close(); 64 //把它设置为null,表示事务已经结束了,下次再去调用getConnection()返回的就不是con了 65 tl.remove();//从tl中移除连接。 66 } 67 /* 68 * 提交事务 69 * 1、获取beginTransaction提供的Connection,然后调用rollbacK()方法 70 * */ 71 public static void rollbackTransaction() throws SQLException { 72 Connection con = tl.get(); 73 if (con == null) throw new SQLException("还没有开启事务,不能滚回!"); 74 /* 75 * 1、直接使用con.rollback() 76 * */ 77 con.rollback(); 78 con.close(); 79 tl.remove(); 80 } 81 /* 82 * 释放连接 83 * */ 84 public static void releaseConnection(Connection connection)throws SQLException{ 85 Connection con = tl.get(); 86 /* 87 * 判断它是否是事务专用,如果是,就不关闭 88 * 如果不是事务专用,那就要关闭 89 * */ 90 //如果con == null,说明现在没有事务,那么connection一定不是事务专用的 91 if(con == null) connection.close(); 92 //如果con != null,说明有事务,那么需要判断连接是否与con相等,若不等,说明参数连接不是事务专用连接 93 if (con != connection) connection.close(); 94 } 95 }
标签:返回 false 一个 class exception throw create 保存 ==
原文地址:http://www.cnblogs.com/gdwkong/p/7633254.html