cp30数据库连接池封装类

package com.shizhan.util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;

import com.mchange.v2.c3p0.DataSources;

/**
 *  数据库工具类
 *  可以根据classpath下配置文件jdbc.properties中配置的参数来获取数据库连接并绑定到当前线程上
 *  可以获取JDBC的事务管理器
 * 
 *
 */
public class DbUtils {
	private static Properties prop = new Properties();
	/** 数据源 */
	private static DataSource ds = null; 
	
	//用来把Connection绑定到当前线程上的变量
	private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
	static{
		try {
			prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties"));
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("在classpath下没有找到jdbc.properties文件");
		}
		
		//使用C3P0连接池技术
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			DataSource unpooled = DataSources.unpooledDataSource(
					prop.getProperty("jdbcUrl"),
					prop.getProperty("user"),
					prop.getProperty("password"));
			ds = DataSources.pooledDataSource(unpooled);
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	private DbUtils(){}
	
	/**
	 * 根据数据库的默认连接参数获取数据库的Connection对象,并绑定到当前线程上
	 * @return 成功,返回Connection对象,否则返回null
	 */
	public static synchronized Connection getConnection(){
		Connection conn = tl.get(); //先从当前线程上取出连接实例
		
		if(null == conn){ //如果当前线程上没有Connection的实例 
			try {
				conn = ds.getConnection(); // 从连接池中取出一个连接实例 
				tl.set(conn);  //把它绑定到当前线程上
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return conn;
	}
	/**
	 * 获取事务管理器
	 * @return 事务管理实例
	 */
	public static synchronized TransactionManager getTranManager(){
		return new TransactionManager(getConnection());
	}
	
	/**
	 * 关闭数据库连接,并卸装线程绑定
	 * @param conn 要关闭数据库连接实例
	 * @throws DaoException 
	 */
	protected static void close(Connection conn){
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				 e.printStackTrace();
			} finally {
			        tl.remove(); //卸装线程绑定
			}
		}
	}
	
}
package com.shizhan.util;

import java.sql.Connection;  
import java.sql.SQLException;  
/** 
 * 事务管理器 
 * 
 * 
 */  
public class TransactionManager {  
    private Connection conn;  
      
    protected TransactionManager(Connection conn) {  
        this.conn = conn;  
    }  
      
    /** 开启事务 */  
    public void beginTransaction() {  
        try {  
            conn.setAutoCommit(false);  //把事务提交方式改为手工提交   
        } catch (SQLException e) {  
            e.printStackTrace();
        }  
    }  
      
    /** 提交事务并关闭连接 */  
    public void commitAndClose() {  
        try {  
            conn.commit(); //提交事务   
        } catch (SQLException e) {  
        	 e.printStackTrace();
        }finally{  
            DbUtils.close(conn);  
        }  
    }  
      
    /** 回滚并关闭连接 */  
    public void rollbackAndClose(){  
        try {  
            conn.rollback();  
        } catch (SQLException e) {  
        	 e.printStackTrace();
        }finally{  
            DbUtils.close(conn);  
        }  
    }  
}  

#db login parameters
driverClass=oracle.jdbc.driver.OracleDriver
jdbcUrl=jdbc:oracle:thin:localhost:1521:orcl
user=scott
password=tiger 

#pool parameters
initialPoolSize=2
maxPoolSize=5
#maxIdleTime=10
#idleConnectionTestPeriod=5
autoCommitOnClose=true 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值