当前位置:Gxlcms > 数据库问题 > DBCP连接池和事物

DBCP连接池和事物

时间:2021-07-01 10:21:17 帮助过:16人阅读

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   代码   函数   例子   

人气教程排行