码迷,mamicode.com
首页 > 数据库 > 详细

JdbcUtils

时间:2017-10-06 23:52:41      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:返回   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 }

 

JdbcUtils

标签:返回   false   一个   class   exception   throw   create   保存   ==   

原文地址:http://www.cnblogs.com/gdwkong/p/7633254.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!