DBCP连接池和事物

Posted 杂货商

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DBCP连接池和事物相关的知识,希望对你有一定的参考价值。

工具类案例

 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连接池和事物的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache 常用 DBCP 和 DBUtils 的连接池和并发

使用 Spring 和 DBCP 处理 JDBC 连接的正确方法是啥?

数据库连接池和session

DBCP2的使用例子和源码详解(包括JNDI和JTA支持的使用)

启用事物注解

我的学习之路_第二十一章_JDBC连接池