DBCP(DataBase connection pool),数据库连接池。是java数据库连接池的一种,由Apache开发, tomcat 使用的连接池组件,通过数据库连接池,可以让程序自动管理数据库连接的释放和断开。
单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar
由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
【DBCP连接池的使用】
第一步:引入DBCP连接池的jar包.
第二步:编写DBCP代码:
* 手动设置参数:
* 配置文件设置参数:
DBCP连接池的两种使用方式:
(手动方式和配置文件方式)
/**
*
*/
package com.dbcp;
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.imageio.stream.FileImageInputStream;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;
import com.jdbcutils.JDBCUtils;
import com.jdbcutils.JDBCUtils_ByFile;
/**
* DBCP连接池的使用
*
* @author 李 下午9:31:52
*/
public class DBCPDemo {
/**
* 手动方式
*/
@Test
public void demo1() {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///stu");
dataSource.setUsername("root");
dataSource.setPassword("420420");
try {
conn = dataSource.getConnection();
String sql = "select * from student";
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt("id") + " "
+ rs.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils_ByFile.closeConnection(rs, stmt, conn);
}
}
/**
* 配置文件方式
*/
@Test
public void demo2() {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
//设置相关参数
Properties properties = new Properties();
properties.load(new FileInputStream("src/dbcpconfig.properties"));
DataSource dataSource = BasicDataSourceFactory
.createDataSource(properties);
conn = dataSource.getConnection();
String sql = "select * from student";
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt("id") + " "
+ rs.getString("name"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//该处为自定义的工具类,用来释放资源
JDBCUtils_ByFile.closeConnection(rs, stmt, conn);
}
}
}
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///stu
username=root
password=420420
工具类JDBCUtils:
/**
*
*/
package com.jdbcutils;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
/**
* @author 李 下午7:29:53
*/
public class JDBCUtils_ByFile {
private static final String driverClass;
private static final String url;
private static final String username;
private static final String password;
/**
* 读取配置文件
*/
static {
Properties properties = null;
try {
InputStream in = new FileInputStream("src/jdbc.properties");
properties = new Properties();
properties.load(in);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
}
/**
* 加载驱动
*/
public static void loadDriver() {
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 连接数据库 并返回连接conn
*
* @return
*/
public static Connection getConnection() {
Connection conn = null;
try {
loadDriver();
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 释放资源
*
* @param rs
* 结果集
* @param stmt
* 执行sql语句
* @param conn
* 连接
*/
public static void closeConnection(ResultSet rs, PreparedStatement stmt,
Connection conn) {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 释放资源
*
* @param stmt
* 执行sql语句
* @param conn
* 数据库连接
*/
public static void closeConnection(PreparedStatement stmt, Connection conn) {
try {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}