java JDBC数据库连接池技术(Druid ,c3p0)

1|0java JDBC 数据库连接池技术


2|0为什么使用数据库连接池?

这个原因与为什么使用线程池有点相似,都是为了提高资源的利用率,减少申请时间的浪费,提高程序的运行效率。
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数
据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统
无尽的与数据库连接。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3|0数据库连接池的优点:

1.1 资源的重用
数据库连接池中的连接可以重复使用,避免频繁的创建,大大减少了性能的开销,即减少了系统的消耗,也增加了系统环境运行的平稳性
1.2 提高系统的反应速度
s 数据库连接池在初始化的过程中,往往已经创建了若干数据库连接置于连接池中备用,在由业务要使用的时候可以直接拿来使用,避免了初始化和释放过程的时间开销,从而减少了系统的响应时间
1.3 新的资源分配手段
当多个应用共用一个数据库的时候,可以在应用层通过数据库连接池的配置,实现某一应用最大数据库连接数的限制,避免某一应用占用过多的资源
1.4 统一连接管理,避免数据库的连接泄露
数据库连接池中可设置超时占用设定,强制收回被占用的连接,避免常规数据库连接操作中可能出现的资源泄露

4|0两种数据库连接池技术 C3P0 Druid

C3P0 是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以。hibernate 官方推荐使用

Druid 是阿里提供的数据库连接池,据说是集 DBCP 、C3P0 、Proxool 优点于一身的数据库连接池,但是速度不确定是否有 BoneCP 快,据说是目前最吊的数据库连接池之一

在这里插入图片描述

5|0c3p0 的使用

*** 步骤:**
1. 导入 jar 包 (两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,
* 不要忘记导入数据库驱动 jar 包
2. 定义配置文件:
* 名称: c3p0.properties 或者 c3p0-config.xml
* 路径:直接将文件放在 src 目录下即可。

3. 创建核心对象 数据库连接池对象 ComboPooledDataSource 4. 获取连接: getConnection

配置文件:

<c3p0-config> <!-- 使用默认的配置读取连接池对象 --> <default-config> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3309/db2</property> // 数据库用户名 <property name="user">root</property> // 密码 <property name="password">1234</property> <!-- 连接池参数 --> // 初始化连接数 <property name="initialPoolSize">5</property> // 最大连接数 <property name="maxPoolSize">10</property> // 最长的超时连接时间 <property name="checkoutTimeout">3000</property> </default-config> // 自己定义的配置 <named-config name="otherc3p0"> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day25</property> <property name="user">root</property> <property name="password">root</property> <!-- 连接池参数 --> <property name="initialPoolSize">5</property> <property name="maxPoolSize">8</property> <property name="checkoutTimeout">1000</property> </named-config> </c3p0-config>

java 代码

package JDBC; import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class C3P0 { public static void main(String[] args) throws SQLException { // 创建数据库连接池 DataSource ds = new ComboPooledDataSource(); // 获取连接对象 Connection connection = ds.getConnection(); // 定义 sql 语句 String sql="update count set money=0"; // 获取 statement 对象 PreparedStatement preparedStatement = connection.prepareStatement(sql); // 执行 int i = preparedStatement.executeUpdate(); System.out.println(i); // 关闭 statement,归还 connection preparedStatement.close(); connection.close();} }

6|0Druid 的使用

1. 导入 jar 包
导入 jar 包 druid-1.0.9.jar
2. 定义配置文件
是 properties 形式的
可以叫任意名称,可以放在任意目录下
3. 加载配置文件
4. 获取数据库连接池对象
通过工厂来来获取 DruidDataSourceFactory
5. 获取连接
getConnection

配置文件

driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3309/db2 username=root password=1234 // 初始化连接数 initialSize=5 // 最大连接数 maxActive=10 // 最长等待时间 maxWait=3000

工具类

package JDBC; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class DruidUtils { private static DataSource dataSource=null; // 获取数据库连接池 public static DataSource getDataSource() { return dataSource; } // 关闭 statement,归还 connection public static void close(Statement statement, Connection connection){ if (statement!=null){ try {statement.close(); } catch (SQLException e) {e.printStackTrace(); } } if (connection!=null){ try {connection.close(); } catch (SQLException e) {e.printStackTrace(); } } } public static void setDataSource(DataSource dataSource) {DruidUtils.dataSource = dataSource;} static { try { // 加载配置文件经内存 Properties properties = new Properties(); InputStream resourceAsStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties"); properties.load(resourceAsStream); dataSource = DruidDataSourceFactory.createDataSource(properties); } catch (IOException e) {System.out.println(e); } catch (Exception e) {e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return dataSource.getConnection();} }

主函数

package JDBC; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class Druid { public static void main(String[] args) throws SQLException { // 获取连接对象 Connection connection = DruidUtils.getConnection(); // 定义 sql 执行语句 String sql="update count set money=10"; // 获取 statement 对象 PreparedStatement preparedStatement = connection.prepareStatement(sql); // 执行语句 preparedStatement.executeUpdate(); // 关闭 DruidUtils.close(preparedStatement,connection); } }

7|0以上就是 jdbc 数据库连接池技术的一些基础知识,如有错误还请各位批评指正,喜欢我的文章可以点赞关注,谢谢

在这里插入图片描述


EOF

本文作者一只胡说八道的猴子
本文链接https://www.cnblogs.com/pjhaymy/p/13389524.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!