数据库连接---执行完毕---释放
连接---释放,,,这过程是十分浪费资源的
池化技术:准备一些预先的资源,过来就可以直接用
最小连接数
最大连接数
等待超时
DBCP
需要的jar包
commons-dbcp-1.4.jar
commons-pool-1.6.jar
蓝奏云下载连接
https://wwe.lanzouw.com/il5gX00x44xa
https://wwe.lanzouw.com/iOD9i00x44vi
复制进IDEA重新导入



properties配置文件
#连接设置 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true username=root password=123456 #!-- 初始化连接 -- 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_UNCOMMITTED
连接配置文件的类
package com.esd.utils; import org.apache.commons.dbcp.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 in = com.esd.utils.JdbcUtils.class.getClassLoader().getResourceAsStream("pa.properties"); Properties properties=new Properties(); properties.load(in); //创建数据库,工厂模式--》创建对象 dataSource = BasicDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } //获取连接 public static Connection getConnection() throws SQLException { return dataSource.getConnection();//从数据源获取连接 } //释放连接资源 public static void release(Connection conn, Statement st, ResultSet rs){ if(rs!=null){ try{ rs.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(st!=null){ try{ st.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(conn!=null){ try{ conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } }
测试类
package com.esd.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestDBCP { public static void main(String[] args) { Connection conn= null; Statement st =null; ResultSet rs =null; try { conn = JdbcUtils_DBCP.getConnection(); st =conn.createStatement(); String sql ="INSERT INTO users(`id`,`name`,`password`,`email`,`birthday`)"+ "VALUES (5,'lin','123456','1737191246@qq.com','2022-02-03')"; int i = st.executeUpdate(sql); if(i>0){mchange-commons-java-0.2.19.jar System.out.println("插入成功!"); } } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtils_DBCP.release(conn,st,rs); } } }
C3P0
jar包下载
https://mvnrepository.com/artifact/com
c3p0-0.9.5.5.jar,mchange-commons-java-0.2.19.jar
c3p0-config配置文件
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!--
c3p0的缺省(默认)配置
如果在代码中"ComboPooledDataSource ds=new ComboPooledDataSource();"无参使用默认数据源-->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcStudy?useUnicode=true&characterEncoding=utf8&uesSSL=true&serverTimezone=UTC</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="acquiredIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config>
<!--如果在代码中"ComboPooledDataSource ds=new ComboPooledDataSource("MySQL");
使用指定的数据源-->
<named-config name="MySQL">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcStudy?useUnicode=true&characterEncoding=utf8&uesSSL=true&serverTimezone=UTC</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="acquiredIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</named-config>
</c3p0-config>
工具类
package com.esd.utils; import com.mchange.v2.c3p0.ComboPooledDataSource; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; import java.io.InputStream; import java.sql.*; import java.util.Properties; public class jdbcUtils_C3P0 { private static ComboPooledDataSource mySQL=null; static{ try{ //xml文件不用读,加载会自动匹配 mySQL = new ComboPooledDataSource("MySQL"); } catch (Exception e) { e.printStackTrace(); } } //获取连接 public static Connection getConnection() throws SQLException { return mySQL.getConnection();//从数据源中获取连接 } //释放连接资源 public static void release(Connection conn, Statement st, ResultSet rs){ if(rs!=null){ try{ rs.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(st!=null){ try{ st.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(conn!=null){ try{ conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } }
测试类
package com.esd.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class jdbcC3P0 { public static void main(String[] args) { Connection conn= null; Statement st =null; ResultSet rs =null; try { conn =jdbcUtils_C3P0.getConnection(); st =conn.createStatement(); String sql ="INSERT INTO users(`id`,`name`,`password`,`email`,`birthday`)"+ "VALUES (6,'lin','123456','1737191246@qq.com','2022-02-03')"; int i = st.executeUpdate(sql); if(i>0){ System.out.println("插入成功!"); } } catch (SQLException e) { e.printStackTrace(); } finally { jdbcUtils_C3P0.release(conn,st,rs); } } }
本文来自博客园,作者:阿霖找BUG,转载请注明原文链接:https://www.cnblogs.com/lin-07/articles/16296798.html
浙公网安备 33010602011771号