首页 / 设计模式 / 数据库连接池(设计模式)——数据库
数据库连接池(设计模式)——数据库
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了数据库连接池(设计模式)——数据库,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3530字,纯文字阅读大概需要6分钟。
内容图文
![数据库连接池(设计模式)——数据库](/upload/InfoBanner/zyjiaocheng/1084/c9053c78006e46b69c9d1bc6994b062a.jpg)
文章转载自:https://blog.csdn.net/hu_belif/article/details/80812047
一、什么是数据库连接池?
官方:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
个人理解:创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。
二、数据库连接池的运行机制
(2) 使用时向连接池申请可用连接
(3) 使用完毕,将连接返还给连接池
(4) 程序退出时,断开所有连接,并释放资源
![技术分享图片](/upload/getfiles/default/2022/11/6/20221106064352637.jpg)
三、数据库连接池的使用
作为开源的数据库连接池,C3P0是一个优秀的连接池,性能也十分可靠。
首先到http://sourceforge.net/projects/c3p0/下载相应的jar包,总共三个,如下图所示。
![技术分享图片](/upload/getfiles/default/2022/11/6/20221106064352798.jpg)
- package com.zww.server;
- import java.beans.PropertyVetoException;
- import java.sql.Connection;
- import java.sql.SQLException;
- import com.mchange.v2.c3p0.ComboPooledDataSource;
- public final class ConnectionManager {
- //使用单利模式创建数据库连接池
- private static ConnectionManager instance;
- private static ComboPooledDataSource dataSource;
- private ConnectionManager() throws SQLException, PropertyVetoException {
- dataSource = new ComboPooledDataSource();
- dataSource.setUser("root"); //用户名
- dataSource.setPassword("123456"); //密码
- dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/zww");//数据库地址
- dataSource.setDriverClass("com.mysql.jdbc.Driver");
- dataSource.setInitialPoolSize(5); //初始化连接数
- dataSource.setMinPoolSize(1);//最小连接数
- dataSource.setMaxPoolSize(10);//最大连接数
- dataSource.setMaxStatements(50);//最长等待时间
- dataSource.setMaxIdleTime(60);//最大空闲时间,单位毫秒
- }
- public static final ConnectionManager getInstance() {
- if (instance == null) {
- try {
- instance = new ConnectionManager();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return instance;
- }
- public synchronized final Connection getConnection() {
- Connection conn = null;
- try {
- conn = dataSource.getConnection();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return conn;
- }
- }
- package com.zww.server;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
- public class ConnectionDemo {
- public static void main(String[] args) throws SQLException {
- System.out.println("使用连接池................................");
- for (int i = 0; i < 20; i++) {
- long beginTime = System.currentTimeMillis();
- Connection conn = ConnectionManager.getInstance().getConnection();
- try {
- PreparedStatement pstmt = conn.prepareStatement("select * from event");
- ResultSet rs = pstmt.executeQuery();
- while (rs.next()) {
- // do nothing...
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- try {
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- long endTime = System.currentTimeMillis();
- System.out.println("第" + (i + 1) + "次执行花费时间为:" + (endTime - beginTime));
- }
- System.out.println("不使用连接池................................");
- for (int i = 0; i < 20; i++) {
- long beginTime = System.currentTimeMillis();
- MysqlDataSource mds = new MysqlDataSource();
- mds.setURL("jdbc:mysql://localhost:3306/zww");
- mds.setUser("root");
- mds.setPassword("123456");
- Connection conn = mds.getConnection();
- try {
- PreparedStatement pstmt = conn.prepareStatement("select * from event");
- ResultSet rs = pstmt.executeQuery();
- while (rs.next()) {
- // do nothing...
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- try {
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- long endTime = System.currentTimeMillis();
- System.out.println("第" + (i + 1) + "次执行花费时间为:"
- + (endTime - beginTime));
- }
- }
运行结果如下图所示:
![技术分享图片](/upload/getfiles/default/2022/11/6/20221106064352850.jpg)
![技术分享图片](/upload/getfiles/default/2022/11/6/20221106064353010.jpg)
测试结果表明,在使用连接池时,只在第一次初始化时,比较耗时,完成初始化之后,使用连接池进行数据库操作明显比不使用连接池花费的时间少。
原文:https://www.cnblogs.com/HSH0709beliefs/p/9228602.html
内容总结
以上是互联网集市为您收集整理的数据库连接池(设计模式)——数据库全部内容,希望文章能够帮你解决数据库连接池(设计模式)——数据库所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。