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 连接的正确方法是啥?