DBCP连接池

dbcp连接池

需要的架包
1.commons-dbcp.jar
2.commons-pool.jar
3.mysql-connector-java-5.0.8-bin.jar

DBCP相关配置:DBCP configuration
说明:
defaultAutoCommit: 对于事务是否 autoCommit, 默认值为 true
defaultReadOnly: 对于数据库是否只能读取, 默认值为 false
driverClassName:连接数据库所用的 JDBC Driver Class,
maxActive: 连接池的最大数据库连接数。设为0表示无限制,默认为8
maxIdle: 最大等待连接中的数量,设 0 为没有限制 (对象池中对象最大个数)
minIdle:对象池中对象最小个数
maxWait: 最大等待秒数, 单位为 ms, 超过时间会丟出错误信息
password: 登陆数据库所用的密码
url: 连接数据库的 URL
username: 登陆数据库所用的帐号
validationQuery: 验证连接是否成功,该选项用来验证数据库连接的有效性, SQL SELECT 指令至少要返回一行
removeAbandoned: 是否自我中断, 默认是 false
removeAbandonedTimeout: 几秒后会自我中断, removeAbandoned 必须为 true
logAbandoned: 是否记录中断事件, 默认为 false
minEvictableIdleTimeMillis:大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证;默认30分钟
timeBetweenEvictionRunsMillis:失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程,默认-1
testOnBorrow:取得对象时是否进行验证,检查对象是否有效,默认为false
testOnReturn:返回对象时是否进行验证,检查对象是否有效,默认为false
testWhileIdle:空闲时是否进行验证,检查对象是否有效,默认为false
initialSize:初始化线程数


一。通过直接配置数据库属性连接
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.DataSourceConnectionFactory;
class dbcputils {
	private static dbcputils dbcp=null;
	private BasicDataSource dbs=null;
	private DataSourceConnectionFactory dscf=null;
	public dbcputils(){
		if(dbs==null){
			dbs=new BasicDataSource();
			dbs.setUsername("root");
			dbs.setPassword("jarrem");
			dbs.setUrl("jdbc:mysql://127.0.0.1:3306/tang");
			dbs.setDriverClassName("com.mysql.jdbc.Driver");
			dbs.setMaxActive(11);
			dbs.setInitialSize(10);
			dbs.setMaxIdle(5);
			dbs.setMinIdle(3);
			dscf=new DataSourceConnectionFactory(dbs);
			System.out.println("初始化实例了");
		}
	}
	public dbcputils getInstance(){
		if(dbcp==null){  
			dbcp=new dbcputils();  
			System.out.println("getInstance初始化实例了");
			}
		return dbcp;
	}
	public Connection getConnection(){
		Connection connection=null;
				try {
				connection = dscf.createConnection();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					System.out.println("获取Connection失败!");
					e.printStackTrace();
				}
		return connection;
		}
	public static void main(String[] args){
	 dbcputils dp=new dbcputils();
	 long begin=System.currentTimeMillis();
	 			List list=new ArrayList();
		 		Connection connection = dp.getInstance().getConnection();
		 		try {
					PreparedStatement ps = connection.prepareStatement("select * from user;");
					ResultSet result = ps.executeQuery();
					while(result.next()){
						list.add(result);
						System.out.println(result.getString(1));
					}
					for(Object o:list){
						System.out.println(list.toString());
					}
					connection.close();
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
	 
	long end=System.currentTimeMillis();
	System.out.println(end-begin);
	}
}


二.通过properties文件配置数据库
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.apache.commons.dbcp.DataSourceConnectionFactory;
public class dbcpPool {
	private BasicDataSource bds=null;
	private DataSourceConnectionFactory dscf=null;
	private Properties properties=null;
	private DataSource DataSource=null;
	private static Connection connection=null;
	public dbcpPool(){
		if(bds==null){
			bds=new BasicDataSource();
			properties=new Properties();
			FileInputStream in;
			try {
				//我这里使用的是绝对路径,根据自己文件位置修改
				in = new FileInputStream("C:\\Users\\lenovo\\Workspaces\\MyEclipse Professional 2014\\DatabaseConnectionPool\\src\\com\\tang\\dbpcPool2\\link.properties");
				properties.load(in);
					DataSource = BasicDataSourceFactory.createDataSource(properties);
					connection = DataSource.getConnection();
			} catch (Exception e) {
				e.printStackTrace();
			}
			
		}
	}
	public static void main(String args[]){
		try {
			new dbcpPool();
			PreparedStatement statement = connection.prepareStatement("select * from user;");
			ResultSet result = statement.executeQuery();
			while(result.next()){
				System.out.println(result.getString(1)+"    "+result.getString(2));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}


posted @ 2016-09-20 20:07  jarrem  阅读(344)  评论(0编辑  收藏  举报