数据库连接池的使用

什么是数据库连接池?

在进行数据库操作时,使用单个的数据库连接非常的耗费资源和时间,使用数据库连接池可以提高性能。

数据库连接池其实就是一个存放了一定数量的Connection对象的链表,当客户端进行数据库连接时,从链表的第一个位置移除一个连接对象,当用户用完的时候将连接对象重新加入链表的末尾。这样连接池中的连接对象就可以重复使用。



数据源配置步骤:

常用的数据源有两种:

DBCP(Database Connection Pool):


> 添加jar包 commons-dbcp-.x.jar commons-pool-x.jar和mysql-connector-java-xxx-bin.jar

> 添加属性资源文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day13

#数据库的用户名和密码
username=root
password=wency

#连接池中最开始的连接对象数量
initialSize=10

#最大的连接数
maxActive=50

#最小的连接数
maxIdle=20


minIdle=5

#连接的等待时间
maxWait=60000

> 编写数据源工具类


package com.wency.utils;

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

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.Statement;



public class DBCPUtils {

	private	static DataSource ds=null;
	
		static{
			Properties pro=new Properties();
			
			try {
				pro.load(DBCPUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"));
				ds=BasicDataSourceFactory.createDataSource(pro);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				throw new ExceptionInInitializerError("配置文件错误");
			}
		}
		
		public static Connection getConnection(){
			try {
				return ds.getConnection();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				throw new ExceptionInInitializerError("服务器繁忙,请稍后访问");
			}
		}
		
		public static void release(Connection conn,PreparedStatement sta,ResultSet rs){
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				conn=null;
			}
			
			if(sta!=null){
				try {
					sta.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				sta=null;
			}
			
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				rs=null;
			}
			
		}
		
		
}

客户端代码:

		Connection conn=null;
		PreparedStatement ps=null;
		
		conn=DBCPUtils.getConnection();
		try {
			ps=conn.prepareStatement("insert into student(name,age) values('wency','22'");
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			DBCPUtils.release(conn, ps, null);
		}

第二种数据源:c3p0

 使用步骤:

1、添加jar包

c3p0-xxx.jar 和mysql-connector-java-xxx-bin.jar

2、编写配置文件

c3p0-config.xml,放在src目录下

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <default-config>
	<property name="driverClass">com.mysql.jdbc.Driver</property>
	<property name="jdbcUrl">jdbc:mysql://localhost:3306/day13</property>
	<property name="user">root</property>
	<property name="password">wency</property>
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>

  </default-config>

  

</c3p0-config>


3.编写c3p0工具类

package com.wency.dbutils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mysql.jdbc.ResultSet;


public class C3p0Utils {
	//创建ComboPooledDataSource对象
	private static DataSource dataSource=new ComboPooledDataSource();
	//获取连接的方法
	public static Connection getConnection(){
		try {
			return dataSource.getConnection();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException("服务器出错");
		}
	}
	//获取数据源
	public  static DataSource getDataSource() {
		return dataSource;
	}
	//释放资源
	public static void release(Connection conn,PreparedStatement prsmt,ResultSet rs){
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			conn=null;
		}
		
		if(prsmt!=null){
			try {
				prsmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			prsmt=null;
		}
		
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			rs=null;
		}
		
	}
	
	
}


4.调用工具类创建连接

Connection conn=null;
		PreparedStatement ps=null;
		
	
		try {
			conn=C3p0Utils.getConnection();
			ps=conn.prepareStatement("insert into student(name,age) values('wency','22'");
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			C3p0Utils.release(conn, ps, null);
		}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值