DBCP连接池所用到的两个jar包下载地址_ximexi的博客-CSDN博客DBCP连接池所用到的两个jar包下载地址commons-dbcp.jar:http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgicommons-pool.jar:http://commons.apache.org/proper/commons-pool/download_pool.cgihttps://blog.csdn.net/ximexi/article/details/112609042由于DBCP2需要添加一个commons-logging,所以还要下载一个
然后导入jar包
2写一个dbcp的配置文件dbcpconfig.properties(数据来自B站up:遇见狂神说)#连接设置 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3333/jdbcstudy?userUnicode=true&characterEncoding=utf8&uesSSL=true username=root password=My123 # initialSize=10 #最大连接数量 maxActive=50 # maxIdle=20 # minIdle=5 # maxWait=60000#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:【属性名=property;】 #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。 connectionProperties=useUnicode=true;characterEncoding=utf8 #指定由连接池所创建的连接的自动提交(auto-commit)状态。 defaultAutoCommit=true #driver default 指定由连接池所创建的连接的只读(read-only)状态。 #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix) defaultReadonly= #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。 #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE defaultTransactionIsolation=READ_COMMITTED3编写jdbcUtils_dbcp进行连接(相当于之前进行调用的对象jdbcUtils)
package com.haoran.lesson5;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class jdbcUtils_dbcp {
private static DataSource dataSource=null;
static {
try{
InputStream resourceAsStream = jdbcUtils_dbcp.class.getClassLoader().getResourceAsStream("dbqpconfig.properties");
//读取配置文件
Properties properties = new Properties();
properties.load(resourceAsStream);//下载资源
//创建数据源
dataSource = BasicDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
//新建一个release的方法类来实现 释放连接资源 的功能
public static void release(Connection conn, Statement st, ResultSet rs){
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (st!=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
4进行测试
package com.haoran.lesson5;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Testdbcp {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs =null;
try {
conn= jdbcUtils_dbcp.getConnection();
String sql="SELECt * FROM `users` WHERe id=?";
//预编译SQL,先写SQL,不执行,用占位符?
pst=conn.prepareStatement(sql);
//手动给参数赋值
pst.setInt(1,2);
rs=pst.executeQuery();
if (rs.next()){
System.out.println(rs.getString("NAME"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
jdbcUtils_dbcp.release(conn,pst,rs);
}
}
}
dbcp它的原理是维护多个连接对象Connection,在web项目要连接数据库时直接使用它维护的对象进行连接,省去每次都要创建连接对象的麻烦。提高效率和减少内存使用。
使用数据库连接池,在项目开发中就不需要编写连接数据库的代码



