数据库连接池

有三种连接池的方法:

第一种(jndi):

1. 以下配置均基于 tomcat5.5 以上版本
2. 找到 tomcat 目录中的 conf 文件夹中的 context.xml 文件
3. 节点中添加 信息

4. tomcat lib 目录下添加 JDBC 所用驱动包

数据库连接池_第1张图片

5.以上步骤注册了一个名字为jdbc/cmsDataSource

6.从数据库连接池中得到连接对象

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

public class BaseDataSource {
	private static DataSource dataSource;
	private BaseDataSource(){
		
	}
	static{
		Context ct = null;
		try {
			ct = new InitialContext();
			dataSource=(DataSource) ct.lookup("java:comp/env/jdbc/cms");//配置文件中的名称。
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	public static DataSource getBaseDataSource(){
		return dataSource;
	}
}

7.连接数据库

// 连接对象
	private Connection conn;
	// 预编译PreparedStatement对象
	protected PreparedStatement pstmt;
	protected CallableStatement statement;
	// 结果集ResultSet对象
	protected ResultSet rs;

	protected void getConnection() {
		try {
			this.conn=dataSource.getConnection();
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}

	}

	// 释放资源
	protected void closeResource() {
		if (rs != null) {
			try {
				rs.close();// 释放结果集
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (pstmt != null) {
			try {
				pstmt.close();// 释放预编译的命令对象
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();// 释放连接对象
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

第二种(dbcp):

1.www.apache.org官方网站下载dbcp需要的jar包

包括:commons-dbcp-1.4.jar     commons-pool-1.5.5.jar

2.在项目下新建.propertie文件    可以放在WEB-INF目录或和数据访问类相同的目录下

内容如下:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/xxx
username=root
password=root
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=60000

3.使用dbcp得到数据库连接

import java.io.InputStream;
import java.util.Properties;

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

//import org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory;
import org.apache.commons.dbcp.BasicDataSourceFactory;
/**
 * 单例模式生成DataSource对象
 * @author Administrator
 *
 */
public class DataSourceUtil {

	private static DataSource dataSource;
	
	static{
		Properties p=new Properties();
		InputStream is=DataSourceUtil.class.getResourceAsStream("/cn/com/ambow/movie/util/dbcp.properties");

		try {
			p.load(is);
			dataSource=BasicDataSourceFactory.createDataSource(p);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	private DataSourceUtil(){
		
	}
	
	public static DataSource getDataSource(){
		return dataSource;
	}
}

4.连接数据库

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.sql.DataSource;


public class DBUtil {

	
	private Connection conn;

	public void openConnection() throws SQLException, ClassNotFoundException,
			IOException {
		
		//获取连接池对象
		DataSource dataSource=DataSourceUtil.getDataSource();
		//获取连接
		this.conn=dataSource.getConnection();

	}

	public void closeConnection() throws SQLException {
		if (conn != null && conn.isClosed() == false) {
			conn.close();
		}
	}

第三种(c3p0):

这是最常用的一种

从www.sourceforge.net上下载c3p0数据库连接池所需jar文件
将下载的文件c3p0-0.9.1.2.jar和jdbc驱动jar文件拷贝到网站WEB-INF目录下的lib目录下
src 目录下新建c3p0.properties文件,名称必须为此
c3p0.properties内容:
#驱动名称
c3p0.driverClass=com.mysql.jdbc.Driver
#连接字符串
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/bankcms
#连接数据库的用户名称
c3p0.user=root
#连接数据库的密码
c3p0.password=root
#连接池中最少的连接数目
c3p0.minPoolSize=10
#连接池中最大的连接数据
c3p0.maxPoolSize=100
#连接池初始化时的连接数据
c3p0.initialPoolSize=10
#连接池中连接最大空闲时间(秒),0为无限
c3p0.maxIdleTime=60

连接数据库

ComboPooledDataSource cpds=new ComboPooledDataSource();
try {
	Connection conn=cpds.getConnection();
	Statement stmt=conn.createStatement();
	//使用连接对象,与普通jdbc一致
	conn.close();
} catch (SQLException e) {
	//异常处理
}

dbcp、c3p0补充说明

£ 两种数据库连接池都可以使用配置文件作为参数配置
£ 也都可以不使用参数进行配置
只需在获取对象之后,使用对象的方法来设置连接池的参数
dbcp使用如下代码获取对象
BasicDataSource bds=newBasicDataSource()
c3p0使用如下代码获取对象
ComboPooledDataSource cpds=newComboPooledDataSource()
调用对象的setXxx方法可以设置连接池参数

你可能感兴趣的:(java,连接池)