1首先在下面地址下载两个jar包
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,所以还要下载一个
然后导入数据库
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 #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 --> 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_COMMITTED
3编写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("db.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项目要连接数据库时直接使用它维护的对象进行连接,省去每次都要创建连接对象的麻烦。提高效率和减少内存使用。
使用数据库连接池,在项目开发中就不需要编写连接数据库的代码