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

DBCP连接池和事物

时间:2019-04-09 20:22:42      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:dao   cdata   说明   构造函数   adl   basic   代码   函数   例子   

工具类案例

 1 public static final String DRIVER = "com.mysql.jdbc.Driver";
 2     public static final String URL = "jdbc:mysql://localhost:3306" + "/java1203?useUnicode" + "=true&characterEncoding=UTF-8";
 3     public static final String USERNAME = "root";
 4     public static final String PASSWORD = "123456";
 5     /*
 6      * 创建连接池BasicDataSource
 7      */
 8     public static BasicDataSource dataSource = new BasicDataSource();
 9     //创建ThreadLoacl对象
10     public static ThreadLocal<Connection> t=new ThreadLocal<Connection>();
11     
12     //静态代码块
13     static {
14         //对连接池对象 进行基本的配置
15         dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
16         dataSource.setUrl(URL); //指定要连接的数据库地址
17         dataSource.setUsername(USERNAME); //指定要连接数据的用户名
18         dataSource.setPassword(PASSWORD); //指定要连接数据的密码
19     }
20     /*
21      * 返回连接池对象
22      */
23     public static DataSource getDataSource(){
24         return dataSource;
25     }

获得一条连接

 1 //返回从连接池中获取一条连接
 2     public static Connection getconn()
 3     {
 4         Connection conn=null;
 5         try {
 6             conn=dataSource.getConnection();
 7         } catch (SQLException e) {
 8             // TODO Auto-generated catch block
 9             e.printStackTrace();
10         }
11         return conn;
12     }

事物实现案例

 1 //获取当前对象
 2     public static Connection getCurrentConn()
 3     {
 4         Connection conn=t.get();
 5         if(conn==null)
 6         {
 7             conn=getconn();
 8             t.set(conn);
 9         }
10             return conn;
11     }
12     
13     //开启事物
14     public static void start()
15     {
16         try {
17             getCurrentConn().setAutoCommit(false);
18         } catch (SQLException e) {
19             // TODO Auto-generated catch block
20             e.printStackTrace();
21         }
22     }
23     
24     //回滚事物
25     public static void rollback()
26     {
27         try {
28             getCurrentConn().rollback();
29         } catch (SQLException e) {
30             // TODO Auto-generated catch block
31             e.printStackTrace();
32         }
33     }
34     
35     //提交事务
36     public static void commit()
37     {
38         try {
39             getCurrentConn().commit();
40         } catch (SQLException e) {
41             // TODO Auto-generated catch block
42             e.printStackTrace();
43         }
44     }

 

说明:在dao层获取Conn对象时使用此类的,getCurrentConn();静态方法

  或者使用连接池QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource());在此构造函数中传参

  

事物的使用:使用事物必须在dao层使用getCurrentConn();静态方法获取conn对象

例子:事物的使用位置

 1 public void transfer(String out,String in,double money)
 2     {
 3         try {
 4             //开始事物
 5             MyDBUtils.start();
 6             accountDao.jianMoney(out, money);//调用到层方法
 7             accountDao.jiaMoney(in, money);
 8         } catch (SQLException e) {
 9             // TODO Auto-generated catch block
10             //回滚
11             MyDBUtils.rollback();
12             e.printStackTrace();
13         }finally{
14             //提交事务
15             MyDBUtils.commit();
16         }
17         
18     }

 

DBCP连接池和事物

标签:dao   cdata   说明   构造函数   adl   basic   代码   函数   例子   

原文地址:https://www.cnblogs.com/xiaozhang666/p/10679290.html

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