谈谈数据库连接池

前言:

最近又在为暑假的实习奔波...今天的面试被问到连接池有没有使用过,一时竟然哑口(简历上写的可以熟悉mysql啊~)。回来反思总结了一下,然后又看了20分钟网上视频。为防止下次面试又出糗,于是便有了这篇随笔~

l 为什么使用数据库连接池:

为了避免每次访问数据库的时候都需要重新建立新的连接而影响运行速度,在实际的项目中通常使用数据库连接池来统一调配,从而提高数据库的访问效率。

l 原理示意图:

l 下载解压

l 用浏览器查看文档doc下的index.html文件

l 常见2种连接方式

(1)java文件实例化DataSource (详见后面实例代码)

(2)src目录下创建c3p0-config.xml

 1 <c3p0-config>
 2
 3   <named-config name="helloc3p0">
 4
 5    <!-- 自己配置數本機據庫屬性 -->
 6
 7    <property name="driverClass">com.mysql.jdbc.Driver</property>
 8
 9    <property name="jdbcUrl">jdbc:mysql://localhost/youku</property>
10
11    <property name="user">root</property>
12
13    <property name="password">1234</property>
14
15
16
17    <!-- 從index.html說明文檔裡面複製后自行修改即可 -->
18
19     <property name="acquireIncrement">5</property>
20
21     <property name="initialPoolSize">5</property>
22
23     <property name="minPoolSize">5</property>
24
25     <property name="maxPoolSize">10</property>
26
27
28
29     <property name="maxStatements">2</property>
30
31     <property name="maxStatementsPerConnection">5</property>
32
33
34
35   </named-config>
36
37 </c3p0-config>

l 封装调用(完整代码)

  1 package util;
  2
  3
  4
  5 import java.sql.Connection;
  6
  7 import java.sql.DriverManager;
  8
  9 import java.sql.SQLException;
 10
 11 import javax.sql.DataSource;
 12
 13
 14
 15 import com.mchange.v2.c3p0.ComboPooledDataSource;
 16
 17
 18
 19 public class JDBCUtil {
 20
 21 Connection conn = null;
 22
 23
 24
 25 public Connection getjdbcConnection() throws Exception {
 26
 27 Class.forName("com.mysql.jdbc.Driver");
 28
 29 String url = "jdbc:mysql://localhost:3306/youku";
 30
 31 return DriverManager.getConnection(url, "root", "1234");
 32
 33 }
 34
 35 //因为使用连接池只需要进行一次初始化,因此声明为‘static‘类型
 36
 37 private static DataSource datasource;
 38
 39 static {
 40
 41 datasource = new ComboPooledDataSource("helloc3p0");
 42
 43 }
 44
 45
 46
 47 public Connection getc3p0Connection() throws Exception {
 48
 49 return datasource.getConnection();
 50
 51 }
 52
 53 //测试2种不同的连接方式jdbc 和 c3p0数据库连接池
 54
 55 public void test() throws Exception {
 56
 57 conn = this.getjdbcConnection();
 58
 59 System.out.println("jdbc连接方式:" + conn.getMetaData());
 60
 61 conn = this.getc3p0Connection();
 62
 63 System.out.println("c3p0连接池方式:" + conn.getMetaData());
 64
 65 }
 66
 67
 68
 69 // method 1: 實例化c3p0數據源對象,進行屬性set設置
 70
 71 public void c3p0() throws Exception {
 72
 73 ComboPooledDataSource cpds = new ComboPooledDataSource();
 74
 75 cpds.setDriverClass("com.mysql.jdbc.Driver"); // loads the jdbc driver
 76
 77 cpds.setJdbcUrl("jdbc:mysql://localhost/youku");
 78
 79 cpds.setUser("root");
 80
 81 cpds.setPassword("1234");
 82
 83 System.out.println(cpds.getDataSourceName());
 84
 85 System.out.println("最大連接池數量:"+cpds.getMaxPoolSize());
 86
 87
 88
 89 }
 90
 91
 92
 93 // method 2:引用配置好的數據源
 94
 95 public void c3p0_1() throws SQLException {
 96
 97 // helloc3p0 對應 "c3p0-config.xml文件中的app-name"
 98
 99 DataSource dataSource = new ComboPooledDataSource("helloc3p0");
100
101 System.out.println(dataSource.getConnection());
102
103
104
105 ComboPooledDataSource cp = (ComboPooledDataSource) dataSource;
106
107 System.out.println("最大連接池數量:"+cp.getMaxPoolSize());
108
109 }
110
111
112
113 public static void main(String[] args) throws Exception {
114
115
116
117 new JDBCUtil().test();
118
119 new JDBCUtil().c3p0();
120
121 new JDBCUtil().c3p0_1();
122
123 }
124
125
126
127 }

测试结果:

l 可能出现的问题:

1)没有添加相关jar包,无法运行!

2)xml文件没有创建在lib或者src目录下,可能出现报错:“...don’t exist...”

(hint:“c3p0-config.xml”这个文件名一般不改,否则也可能出现类似的错误!)

结语:

数据库连接池也算是JDBC的一个知识点的小拓展,如果这点常识都不能掌握那可不能轻易说自己熟悉mysql,JDBC了。

时间: 2024-10-29 08:22:04

谈谈数据库连接池的相关文章

数据库连接池的原理

这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包. 一.早期我们怎么进行数据库操作        1.原理:一般来说,java应用程序访问数据库的过程是: ①装载数据库驱动程序: ②通过jdbc建立数据库连接: ③访问数据库,执行sql语句: ④断开数据库连接.        2.代码  // 查询所有用户 [java] view plain copy print? Public void FindAllUsers(){ //1.装载s

spark 大型项目实战(七):用户访问session分析(七) --数据库连接池原理

**文章地址:http://www.haha174.top/article/details/257789** 1.谈谈数据库连接池的原理 ------------- 这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包. 一.早期我们怎么进行数据库操作 1.原理:一般来说,java应用程序访问数据库的过程是: ①装载数据库驱动程序: ②通过jdbc建立数据库连接: ③访问数据库,执行sql语句: ④断开数据库连接. 2.代码 Public

数据库连接池

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 数据库连接池简介: 数据库连接对象是有限资源,所以数据库连接池是用于负责分配.管理和释放数据库连接对象,它允许应用程序重复使用一个现有的数据库连接对象,而不是再重新建立一个:这一点实际上和线程池的概念差不多.数据库连接池会释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏,这项技术能明显提高对数据库操作的性能. 不使用

JDBC数据库连接池技术

在JDBC中,获得连接或释放资源是非常消耗系统资源的两个过程,为了解决此类性能问题,通常采用连接池技术,来共享连接.这样我们就不需要每次都创建连接.释放连接了,这些操作都交给了连接池. 用池的概念来管理Connection,这样可以重复使用Connection.有了连接池以后就不用自己亲自创建连接而是通过连接池来获得Connection对象.当使用完Connection之后,调用Connection的close()方法不是真的将连接关闭,而是把Connection归还给连接池.连接池就可以继续保

Druid数据库连接池两种简单使用方式

阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好 简单使用介绍 Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息全部配置给DataSource对象. 下面给出2种配置方法实例: 1. 纯Java代码创建 DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver&qu

几种常见数据库连接池的使用比较

感觉在介绍之前有必要阐述一下连接池的几个概念,有助于后边一些文字的理解. 最原始的数据库使用就是打开一个连接并进行使用,使用过后一定要关闭连接释放资源.由于频繁的打开和关闭连接对jvm包括数据库都有一定的资源负荷,尤其应用压力较大时资源占用比较多容易产生性能问题.由此使用连接池的作用就显现出来,他的原理其实不复杂:先打开一定数量的数据库连接,当使用的时候分配给调用者,调用完毕后返回给连接池,注意返回给连接池后这些连接并不会关闭,而是准备给下一个调用者进行分配.由此可以看出连接池节省了大量的数据库

数据库连接池配置说明

1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问题提出来的. 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 1.2 参考资料 DBC

数据库连接池的理解和使用

一.什么是数据库连接池? 官方:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放. 个人理解:创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患.所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠. 二.数据库连接池的运行机制 (1) 程序初始化时创建连接池 (2) 使用时向连接池申请可用连接 (3) 使

数据库连接池和connection的理解

数据库连接池Data Source Pool的理解 1.数据库连接池允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个连接,避免了每个方法里new connection的耗费资源和时间. 2.数据库连接池是在项目启动时候初始化的,以方便程序运行时,随时可以调用这些已经被创建好的connection.只需要getConnection()就好. connection的建立.断开都由连接池自身来管理. 3.创建connection是个很耗时的操作,所以建议在项目启动的时候去创建connec