数据库连接池

  • 数据库连接池
    在JDBC编程中,每次创建和断开Connection对象都需要消耗一定的时间和IO资源,频繁的创建和断开连接势必会影响数据库的访问效率,甚至导致数据库服务器宕机。
    数据库连接池负责分配、管理和释放数据库连接对象,当应用程序需要访问数据库是并不是创建Connection,而是从连接池“申请”一个Connection对象,使用完毕后,将该数据库连接池对象返回到连接池中,供其他线程使用。这样可以减少创建和断开连接对象的次数,提高数据库的访问效率。
  • DBCP数据源
    1.jar包
Commons-dbcp.jar  连接池的实现
Commons-pool.jar 连接池实现依赖的库

2.配置文件

//属性资源文件中配置的参数
//数据库驱动
driverClassName = com.mysql.jdbc.Driver 
//数据库地址
url = jdbc:mysql://localhost:3306/copy?useUnicode=true&characterEncoding=utf-8
username = root
password =root
initialSize = 3
minSize = 3
maxSize = 6
//最大空闲时间,单位秒
maxIdle =2

3.dbcp数据源工具类:

package com.offcn.util;

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

import javax.sql.DataSource;
import javax.swing.plaf.basic.BasicEditorPaneUI;

import org.apache.commons.dbcp.BasicDataSourceFactory;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DBCPConnection {
	
	private static DataSource ds = null;
	
	static{
		try {
			//创建属性对象
			Properties prop = new Properties();
			//类加载器的方式来加载属性文件
			InputStream is = DBCPConnection.class.getClassLoader().getResourceAsStream("dbcp.properties");
			//对properties对象数据的赋值
			prop.load(is);
			//通过工厂模式,创建DataSource对象
			ds = BasicDataSourceFactory.createDataSource(prop);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//从连接池中申请一个连接对象
	public static Connection getConnection() throws SQLException{
		return ds.getConnection();
	}
	
	//将连接对象还给数据库连接池
	public static void closeConnection(Connection con) throws SQLException{
		if(con != null){
			con.close();
		}
	}
}

  • C3P0数据源
    1.jar包
 c3p0-0.9.5.2. jar
 mchange-comons-java-0.2.11 jar

2.配置文件

c3p0.driverClass = com.mysql.jdbc.Driver
c3p0.jdbcUrl = jdbc:mysql://localhost:3306/copy?useUnicode=true&characterEncoding=utf-8
c3p0.user = root
c3p0.password =root
//连接池初始化时创建的连接数
c3p0.initialPoolSize = 3
//最小连接数
c3p0.minPoolSize = 3
c3p0.maxPoolSize = 6
//最大空闲时间
c3p0.maxIdleTime =2

3.c3p0数据源工具类

package com.offcn.util;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Connection {
	//数据库连接池对象
	private static DataSource ds = null;
	
	static{
		ds = new ComboPooledDataSource();//创建dataSource的实例
	}
	//向数据库连接池申请connection连接对象
	public static Connection getConnection() throws SQLException{
		return ds.getConnection();
	}
	
	//将连接对象还给数据库连接池
	public static void closeConnection(Connection con) throws SQLException{
		if(con != null){
			con.close();
		}
	}
}

  • Tomcat内置数据源
    1.jar包
    默认存在内置数据源的jar包
    2.配置文件
    配置在tomcat安装目录下,conf/context.xml文件中,所有的项目都可以使用。
    在当前应用的META-INF中创建context.xml配置,只能供本项目使用。
//配置在当前项目
<?xml version="1.0" encoding="UTF-8"?>
<Context>
	<Resource
		name="jdbc/xuhui"
		auth="Container"
		type="javax.sql.DataSource"
		driverClassName="com.mysql.jdbc.Driver"
		url="jdbc:mysql://localhost:3306/copy?useUnicode=true&amp;characterEncoding=utf-8"
		username="root"
		password="root"
		initialSize = "3"
		minIdle = "1"
		maxActive = "6"
		maxIdle ="2"
	>
	</Resource>
</Context>

3.Tomcat内置数据源工具类

package com.offcn.util;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class TomactDBConnection {
	//代表jndi容器
	private static DataSource ds = null;
	private static Context cxt = null;
	
	static{
		try {
			cxt = new InitialContext();
			//获取连接关键,基于jndi技术获得到服务器数据源
			ds=(DataSource) cxt.lookup("java:/comp/env/jdbc/xuhui");
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//获取连接
	public static Connection getConnection() throws SQLException{
		return ds.getConnection();
	}
	
	//将连接对象还给数据库连接池
	public static void closeConnection(Connection con) throws SQLException{
		if(con != null){
			con.close();
		}
	}
}
  • JNDI技术
    Java Naming and Directory Interface Java命名和目录接口
    把Java对象放在一个容器中,并为容器中的Java对象命名,以后程序想获得Java对象,只需通过名称检索即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值