Java 使用C3P0 连接数据库

需要的.jar包:


C3P0是一个开源的JDBC连接池,在不使用连接池的情况下,在编写Java程序的时候,每一次需要对数据库操作时,如果使用jdbc直接操作的话,都会先进行和数据库的连接、执行SQL语句、断开连接这三个步骤。

有了这个连接池,当需要连接时,可以从该连接池里取出一个线程,这个线程已经和数据库建立了连接,当执行完SQL语句后,又将该连接放回,等待下一次执行语句。这样可以提高访问数据库的效率。

使用C3P0首先要在程序里进行配置,在导入上述,jar包后,需要在src里新建一个c3p0-config.xml文件,该文件用于配置连接池的基本属性:

<c3p0-config>
    <named-config name="mysqlConnection">
        <property name="user">root</property>
        <property name="password">123456</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/sqltest</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        
        <property name="initialPoolSize">20</property>
        <property name="maxPoolSize">25</property>
        <property name="minPoolSize">5</property>
    </named-config>
</c3p0-config>

其中需要配置的有jdbcurl、要连接的数据库、用户、密码、连接池大小、最大容量等。

配置完成后,需要编写一个工具类(通常做法),用于产生连接池的实例,同时,为了保证在对同一个数据库进行操作时,总数使用同一个连接池,将该工具类的构造方法设为单例。

package com.song.c3p0.db.xml;

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

import com.mchange.v2.c3p0.ComboPooledDataSource;

/** 
* @author : homels
* @date 创建时间:2018年5月25日 下午4:43:07
* @ClassName: C3P0XmlSimplify
* @Description: TODO 
* @version 
*/
public class C3P0XmlSimplify {
	private static C3P0XmlSimplify c3P0XmlSimplify;

	private ComboPooledDataSource cpds;
	
	static{
		c3P0XmlSimplify = new C3P0XmlSimplify();
	}

	public C3P0XmlSimplify() {
		cpds = new ComboPooledDataSource("mysqlConnection");
	}
	
	public static C3P0XmlSimplify getInstance(){
		return c3P0XmlSimplify;
	}
	
	public Connection getConnection(){
		Connection conn = null;
		try {
			conn = cpds.getConnection();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static void releaseSources(Connection conn, PreparedStatement ps, ResultSet rs){
		if(null != rs){
			try {
				rs.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		if(null != ps){
			try {
				ps.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		if(null != conn){
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

其中的ComboPooledDataSource类为连接池类,通过将上面的xml配置的名字利用参数传递给它的构造方法,实现实例化。

此后,在需要和数据库进行连接时,通过该工具类即可实现(该工具类封装了连接池),以下测试代码:

package com.song.c3p0.db.xml;

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

import com.mchange.v2.c3p0.ComboPooledDataSource;

/** 
* @author : homels
* @date 创建时间:2018年5月25日 下午4:44:21
* @ClassName: C3P0XmlSimplifyMain
* @Description: TODO 
* @version 
*/
public class C3P0XmlSimplifyMain {
	 public static void main(String[] args) {  
	        Connection conn = null;  
	        PreparedStatement ps = null;  
	        ResultSet rs = null;  
	        try {  
	            conn = C3P0XmlSimplify.getInstance().getConnection();  
	            String sql = "insert into user values(?,?)";
	            String sql1 = "SELECT * FROM user";
	            ps = conn.prepareStatement(sql);
	            ps.setInt(1, 2);
	            ps.setString(2, "b");
	            int result = ps.executeUpdate();
	            if(result>0){
	            	System.out.println("done");
	            }
	            else{
	            	System.out.println("no");
	            }
	            ps.close();
	            ps = conn.prepareStatement(sql1);
	            rs = ps.executeQuery();
	            while(rs.next()){
	            	String name = rs.getString("name");
	            	System.out.println(name);
	            }
	        } catch (Exception e) {  
	            e.printStackTrace();  
	        }finally{  
	            C3P0XmlSimplify.releaseSources(conn, ps, rs);  
	        }  
	    }  
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值