数据库连接池(dbcp,c3p0)的简单实现

  1. dbcp数据库连接池

就性能而言,1.4版本的连接池性能比1.2版本高,跟c3p0差不多

使用此数据库连接池必须导入commons-dbcp,commons-pool包,以下是其实现方法:

import java.sql.SQLException;
import java.sql.Statement;

import org.apache.commons.dbcp.BasicDataSource;

//dbcp数据库连接池连接方法
public class BasicDbcp {
	public static void main(String[] args) throws SQLException {
		String url="jdbc:mysql://localhost:3306/test";
		String dr="com.mysql.jdbc.Driver";
		//实例化数据源对象
		BasicDataSource ds=new BasicDataSource();
		//设置属性
		ds.setDriverClassName(dr);
		ds.setUrl(url);
		ds.setUsername("root");
		ds.setPassword("123");
		System.err.println("被包裹的数据连接(内部私有类):"+ds.getConnection().getClass());
		Statement sta= ds.getConnection().createStatement();
		ResultSet rs= sta.executeQuery("select * from user");
		while(rs.next()){
			System.out.println(rs.getString("name"));
		}
		rs.close();
		sta.close();
		ds.close();
		
	}
}

同时也可以在属性文件(properties)中存放基本属性,然后再在其中获取:

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;


//根据配置文件来连接数据库
public class BasicDbcpProperties {
	private static DataSource ds=null;
	public BasicDbcpProperties(){
		//声明资源文件对象
		Properties pro=new Properties();
		try {
			//load方法来获取此文件
			//以流的方式将此文件传送过来
			pro.load(this.getClass().getResourceAsStream("jdbc.properties"));
			//以 工厂类来创建这个DataSource资源
			ds=BasicDataSourceFactory.createDataSource(pro);
			Connection con=ds.getConnection();
			System.out.println(con);
			con.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static void main(String[] args) throws SQLException {
		//初始化10个连接之后,不会再自动增加连接,因此此处没有设计好
		Connection con=null;
		long start=System.currentTimeMillis();
		new BasicDbcpProperties();
		for(int i=0;i<17;i++){
			con=ds.getConnection();
			System.out.println(con);
		}
		long end=System.currentTimeMillis();
		System.out.println(end-start);
	}
}

2.C3P0数据库连接池

只需要导入C3P0-0.9.jar包即可

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.DataSources;

public class C3PODemo {
	public static void main(String[] args) throws PropertyVetoException, SQLException {
	        //获取DataSource
		ComboPooledDataSource ds=new ComboPooledDataSource();
		ds.setDriverClass("com.mysql.jdbc.Driver");
		ds.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/wj");
		ds.setUser("root");
		ds.setPassword("root");
		ds.setInitialPoolSize(3);
		ds.setMinPoolSize(10);
		ds.setMinPoolSize(5);
		Connection con=ds.getConnection();
		System.out.println(con);
		System.err.print(con);
		DataSources.destroy(ds);
	}
}


你可能感兴趣的:(c3p0,DBCP)