`
webdev2014
  • 浏览: 681781 次
文章分类
社区版块
存档分类
最新评论

java使用c3p0连接数据库

 
阅读更多

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目Hibernate,Spring等。

c3p0与dbcp区别
dbcp没有自动回收空闲连接的功能
c3p0有自动回收空闲连接功能
使用c3p0连接数据库步骤
1、创建一个Java项目,导入c3p0-0.9.1.jar包
这个包可以到网上去下载,如果使用过Hibernate框架,就肯定知道这个包,这个包在Hibernte框架中就存在的
2、创建一个工具类,当然这个工具类因个人喜好,建与不建随自己,为了方便管理,建议还是创建好些
接下来就直接进入代码
第一步就操作了,对有基础的来说不是什么难事
创建一个DbUtil工具类
package com.tenghu.combo.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 数据库连接工具类
 * @author xiaohu
 *
 */
public class DbUtil {
	//数据库连接
	private static String url="jdbc:mysql://localhost:3306/work";
	//数据库驱动
	private static String driver="com.mysql.jdbc.Driver";
	//数据库用户名
	private static String username="root";
	//密码
	private static String password="xiaohu";
	private ComboPooledDataSource cpds;
	private static DbUtil db=new DbUtil();
	public static DbUtil getInstance(){
		return db;
	}
	private DbUtil(){
		cpds=new ComboPooledDataSource();
		try{
			//设置驱动类
			cpds.setDriverClass(driver);
			//设置连接
			cpds.setJdbcUrl(url);
			//设置用户名
			cpds.setUser(username);
			//设置密码
			cpds.setPassword(password);
			//设置最小连接池个数
			cpds.setMinPoolSize(5);
			cpds.setAcquireIncrement(5);
			cpds.setMaxPoolSize(30);
			cpds.setMaxIdleTime(60);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	//获取连接对象
	public Connection getConn(){
		try{
			return cpds.getConnection();
		}catch(Exception e){
			e.printStackTrace();
		}
		return null;
	}
	//获取Statement对象
	public Statement getStatement(Connection conn){
		try {
			return conn.createStatement();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	//获取PreparedStatement对象
	public PreparedStatement getPreparedStatement(Connection conn,String sql){
		try {
			return conn.prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	//获取结果集
	public ResultSet getResult(Statement st,String sql){
		try {
			return st.executeQuery(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	public ResultSet getResult(PreparedStatement ps){
		try {
			return ps.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	//关闭对象
	public void closeObject(Connection conn,Statement st,ResultSet rs){
		try {
			if(null!=rs)
				rs.close();
			if(null!=st)
				st.close();
			if(null!=conn)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			rs=null;
			st=null;
			conn=null;
		}
	}
	//关闭对象
	public void closeObject(Connection conn,PreparedStatement ps,ResultSet rs){
		try {
			if(null!=rs)
				rs.close();
			if(null!=ps)
				ps.close();
			if(null!=conn)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			rs=null;
			ps=null;
			conn=null;
		}
	}
}

在这个工具类我使用了Statement与PreparedStatement两个接口,为了以后方便使用,两个都用上,以后需要用那一个则调用那一个
至于这两个接口的区别,就不多说了,在学习JDBC的时候应该就了解过了

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics