世上没有从天而降的英雄,只有挺身而出的凡人。

                      ——致敬,那些在疫情中为我们挺身而出的人。


  • 运行环境

 JDK8 + IntelliJ IDEA 2018.3 

优点:

使用连接池的最主要的优点是性能。创建一个新的数据库连接所耗费的时间主要取决于网络的速

度以及应用程序和数据库服务器的(网络)距离,而且这个过程通常是一个很耗时的过程。而采用

数据库连接池后,数据库连接请求可以直接通过连接池满足而不需要为该请求重新连接、认证到

数据库服务器,这样就节省了时间。

缺点:

数据库连接池中可能存在着多个没有被使用的连接一直连接着数据库(这意味着资源的浪费)

一、导包

xml文件:

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <modelVersion>4.0.0</modelVersion>
6
7 <groupId>com.papercy</groupId>
8 <artifactId>DBCP</artifactId>
9 <version>1.0-SNAPSHOT</version>
10 <dependencies>
11 <dependency>
12 <groupId>mysql</groupId>
13 <artifactId>mysql-connector-java</artifactId>
14 <version>5.1.48</version>
15 </dependency>
16
17 <!--C3P0-->
18 <dependency>
19 <groupId>c3p0</groupId>
20 <artifactId>c3p0</artifactId>
21 <version>0.9.1.1</version>
22 </dependency>
23 <!--DBCP -->
24 <dependency>
25 <groupId>commons-dbcp</groupId>
26 <artifactId>commons-dbcp</artifactId>
27 <version>1.4</version>
28 </dependency>
29
30 <dependency>
31 <groupId>commons-pool</groupId>
32 <artifactId>commons-pool</artifactId>
33 <version>1.5.7</version>
34 </dependency>
35
36 <dependency>
37 <groupId>junit</groupId>
38 <artifactId>junit</artifactId>
39 <version>4.13</version>
40 </dependency>
41
42 <!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java -->
43 <dependency>
44 <groupId>com.mchange</groupId>
45 <artifactId>mchange-commons-java</artifactId>
46 <version>0.2.15</version>
47 </dependency>
48 </dependencies>
49
50 </project>

二、DBCP

DBUtil 类

 1 package com.papercy;
2
3 import org.apache.commons.dbcp.BasicDataSource;
4
5 public class DBCPUtils {
6 private static String DRIVER="com.mysql.jdbc.Driver";
7 private static String URL="jdbc:mysql://localhost/lob?useUnicode=true&characterEncoding=utf8";
8 private static String USERNAME="root";
9 private static String PASSWORD="123456";
10
11 //获取BasicDataSource并配置,开始.... 
12 private static BasicDataSource basicDataSource=new BasicDataSource();
13 static {
14 basicDataSource.setUrl(URL);
15 basicDataSource.setUsername(USERNAME);
16 basicDataSource.setPassword(PASSWORD);
17 basicDataSource.setInitialSize(10);//初始化创建十个链接
18 basicDataSource.setMaxActive(10);//允许同时10个活动连接数
19 basicDataSource.setMaxIdle(8);//最大空闲连接数
20 basicDataSource.setMinIdle(1);//最小空闲连接数
21
22 }
23
24 public static BasicDataSource getBasicDataSource(){
25 return basicDataSource;
26 }
27 }

测试类

 1 package com.papercy;
2
3 import java.sql.Connection;
4 import java.sql.PreparedStatement;
5 import java.sql.SQLException;
6
7 public class TestDBUtil {
8 public static void main(String[] args) {
9 try {
10 Connection conn=DbcpDBUtil.getDataSource().getConnection();
11 String sql="INSERT INTO student(id,`name`,age) VALUES(NULL,?,?)";
12 PreparedStatement preparedStatement=conn.prepareStatement(sql);
13 preparedStatement.setString(1,"feifeiye");
14 preparedStatement.setInt(2,88);
15 int count=preparedStatement.executeUpdate();
16
17 if (count>0){
18 System.out.println("插入成功");
19 }else{
20 System.out.println("插入失败");
21 }
22
23 } catch (SQLException e) {
24 e.printStackTrace();
25 }
26 }
27 }

注:其中的Close方法不会真正的将连接关闭,而是将其放回到连接池中,对于所有的数据源一般都会改写此方法(使用修饰)。

方式二:使用BasicDataSourceFactory +配置文件

配置文件dbcp.properties:

1 diverClassName=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/lob?useUnicode=true&characterEncoding=utf8
3 user=root
4 pwd=123456
 1 package com.papercy;
2
3 import org.apache.commons.dbcp.BasicDataSourceFactory;
4
5
6 import javax.sql.DataSource;
7 import java.io.FileInputStream;
8 import java.io.FileNotFoundException;
9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.util.Properties;
12
13 public class DbcpDBUtil {
14 public static DataSource getDataSource(){
15 Properties properties=new Properties();
16 String path="src/dbcp.properties";
17 try {
18 InputStream inputStream=new FileInputStream(path);
19 properties.load(inputStream);
20 } catch (FileNotFoundException e) {
21 e.printStackTrace();
22 } catch (IOException e) {
23 e.printStackTrace();
24 }
25
26
27 DataSource dataSource=null;
28 try {
29 dataSource= new BasicDataSourceFactory().createDataSource(properties);
30 } catch (Exception e) {
31 e.printStackTrace();
32 }
33 return dataSource;
34 }
35 }

三、C3P0


C3P0Util类
 1 package com.papercy.c3p0;
2
3 import com.mchange.v2.c3p0.ComboPooledDataSource;
4
5 import javax.sql.DataSource;
6 import java.sql.Connection;
7 import java.sql.PreparedStatement;
8 import java.sql.ResultSet;
9 import java.sql.SQLException;
10
11 /**
12 * C3P0工具类
13 */
14 public class C3p0Utils {
15 //定义数据源对象
16 private static DataSource dataSource;
17 //获取数据源
18 static {
19 dataSource=new ComboPooledDataSource();
20 }
21 //通过数据源获取数据库连接
22 public static Connection getConnection(){
23 try {
24 return dataSource.getConnection();
25 } catch (SQLException e) {
26 e.printStackTrace();
27 return null;
28 }
29 }
30 //关闭预处理对象和结果集对象
31 public static void close(PreparedStatement preparedStatement, ResultSet resultSet){
32 if (resultSet!=null){
33 try {
34 resultSet.close();
35 } catch (SQLException e) {
36 e.printStackTrace();
37 }
38 }
39
40 if (preparedStatement!=null){
41 try {
42 preparedStatement.close();
43 } catch (SQLException e) {
44 e.printStackTrace();
45 }
46 }
47
48 }
49 }

C3P0测试类

 1 package com.papercy.c3p0;
2
3 import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
4
5 import java.sql.Connection;
6 import java.sql.PreparedStatement;
7 import java.sql.ResultSet;
8 import java.sql.SQLException;
9
10 /**
11 * 测试C3P0
12 */
13 public class TestC3p0Pools {
14 public static void main(String[] args) {
15 Connection conn=C3p0Utils.getConnection();
16 String sql="SELECT * FROM EMPLOYEES";
17 PreparedStatement preparedStatement=null;
18 ResultSet resultSet=null;
19 try {
20 preparedStatement=conn.prepareStatement(sql);
21 resultSet=preparedStatement.executeQuery();
22 while(resultSet.next()){
23 int id=resultSet.getInt("EID");
24 String firstName=resultSet.getString("FIRSTNAME");
25 String lastName=resultSet.getString("LASTNAME");
26 int age=resultSet.getInt("AGE");
27 System.out.println(id+"\t"+firstName+"\t"+lastName+"\t"+age);
28 }
29 } catch (SQLException e) {
30 e.printStackTrace();
31 }finally {
32 C3p0Utils.close(preparedStatement,resultSet);
33 }
34 }
35 }

注:

  1. acquireIncrement: 声明当连接池中连接耗尽时再一次新生成多少个连接,默认为3个
  2. initialPoolSize:      当连接池启动时,初始化连接的个数,必须在minPoolSize~maxPoolSize之间,默认为3
  3. minPoolSize:        任何时间连接池中保存的最小连接数,默认3
  4. maxPoolSize:       在任何时间连接池中所能拥有的最大连接数,默认15
  5. maxIdleTime:        超过多长时间连接自动销毁,默认为0,即永远不会自动销毁

PS:

如果,您希望更容易地发现我的新博客,不妨点击一下关注。

如果你觉得本篇文章对你有所帮助,请给予我更多的鼓励,

因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【肥肥也】!

常用数据库连接池配置及使用(Day_11)的更多相关文章

  1. Tomcat6.0数据库连接池配置

    http://blog.163.com/magicc_love/blog/static/185853662201111101130969/ oracle驱动包Tomcat 6.0配置oracle数据库 ...

  2. 【Java】java数据库连接池配置的几种方法

    今天遇到了关于数据源连接池配置的问题,发现有很多种方式可以配置,现总结如下,希望对大家有所帮助:(已Mysql数据库为例) 一,Tomcat配置数据源: 方式一:在WebRoot下面建文件夹META- ...

  3. Tomcat数据库连接池配置

    Tomcat数据库连接池配置 1.            Server.xml的配置 (1)找到tomcat所在目录下的conf\server.xml文件 (2)在文件最后一个</host> ...

  4. 数据库连接池配置(案例及排查指南) 原创: 有赞技术 有赞coder 4天前

    数据库连接池配置(案例及排查指南) 原创: 有赞技术 有赞coder 4天前

  5. Spring + MyBatis中常用的数据库连接池配置总结

    Spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0.可以在Spring配置文件中利用这两者中任何一个配置数据源. DBCP数据源 DBCP类包位于  ...

  6. 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...

  7. java常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...

  8. DataSource - 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...

  9. 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明.RP

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...

随机推荐

  1. 日志收集之filebeat使用介绍

    此系列文章一共分为三部分,分为filebeat部分,logstash部分,es部分.这里会按照每天几百亿条的数据量来考虑,去设计.部署.优化这个日志系统,来最大限度的利用资源,并达到一个最优的性能.本 ...

  2. 《C标准库》学习笔记整理

    简介 <C标准库>书中对 C 标准库中的 15 个头文件的内容进行了详细的介绍,包括各头文件设计的背景知识.头文件中的内容.头文件中定义的函数和变量的使用.实现.测试等. 我学习此书的目的 ...

  3. 03 Django web服务开发 - URL路由

    Django中的APP -Django中的一个APP就是一个应用的意思 -项目可以包含多个APP(多个应用) -一个项目对应一个网站(生活服务网站) 一个APP队形网站的一个应用(二手交易,家政服务) ...

  4. IDA动态调试Android的DEX文件

    Android程序的dex文件的动态调试确实是个大问题,网上也有一些教程但是不是特别的详细,今天用到了IDA动态调试Android的DEX文件,特此记录一下. IDA 6.6新添加了对dex文件的调试 ...

  5. hdu4915 判断括号匹配

    题意:       问你括号匹配是否唯一,三种字符'(','?',')',问号可以变成任何字符. 思路:       首先我们要学会判断当前串是否成立?怎么判断?我的方法是跑两遍,开三个变变量 s1 ...

  6. hdu2492 数状数组或者线段树

    题意:      给你一些人,每个人有自己的攻击力,输入的顺序就是每个人的顺序,他们之间互相比赛,两个人比赛的条件是必须在他们两个位置之间找到一个人当裁判,这个裁判的攻击力必须在他们两个人之间,问你最 ...

  7. POJ2709 染料贪心

    题意:       要搭配出来n种颜料,每种颜料要用mi升,除了这n种颜色还有一个合成灰色的毫升数,灰色是由三种不同的颜色合成的,三种m m m 的不同颜色能合成m升灰色,然后问你满足要求至少要多少盒 ...

  8. NetBIOS名称欺骗和LLMNR欺骗

    目录 LLMNR和NetBios 攻击原理 Responder 攻击过程 LLMNR和NetBios 什么是LLMNR和NetBIOS名称服务器广播? 当DNS名称服务器请求失败时,Microsoft ...

  9. c# p/invoke 无法加载指定的dll 找不到指定的模块 解决方法

    写的程序本来开始好好的,不知道怎么突然就出现了以上这个问题,纠结了好久,网上找了各种方法,比如什么嵌入dll,在system32下面放入dll等等,均宣告失败 下面把我的解决方法写出来,以后只要是这个 ...

  10. 码农飞升记-02-OracleJDK是什么?OracleJDK的版本怎么选择?

    目录 1.Oracle JDK 是什么? 2.Oracle JDK 版本如何选择? 1.Java SE 发布节奏以及不同版本的差距 1.Java SE 8 以及之前版本的发布节奏和不同版本的差距 1. ...