有三种连接池的方法:
第一种(jndi):
5.以上步骤注册了一个名字为jdbc/cms的DataSource
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):
这是最常用的一种
#驱动名称
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补充说明