一、依赖

pom.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>yofc</groupId>
  8. <artifactId>jdbc</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10.  
  11. <dependencies>
  12. <dependency>
  13. <groupId>mysql</groupId>
  14. <artifactId>mysql-connector-java</artifactId>
  15. <version>8.0.15</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.junit.jupiter</groupId>
  19. <artifactId>junit-jupiter-api</artifactId>
  20. <version>5.4.0</version>
  21. <scope>test</scope>
  22. </dependency>
  23. <dependency>
  24. <groupId>com.mchange</groupId>
  25. <artifactId>c3p0</artifactId>
  26. <version>0.9.5.3</version>
  27. </dependency>
  28. </dependencies>
  29.  
  30. <build>
  31. <plugins>
  32. <!-- 指定jdk -->
  33. <plugin>
  34. <groupId>org.apache.maven.plugins</groupId>
  35. <artifactId>maven-compiler-plugin</artifactId>
  36. <configuration>
  37. <source>1.8</source>
  38. <target>1.8</target>
  39. </configuration>
  40. </plugin>
  41. </plugins>
  42. </build>
  43. </project>

二、使用C3P0获取连接(三种方式)

1、实例化和配置 ComboPooledDataSource

  1. @Test
  2. public void testC3P0() throws Exception {
  3. ComboPooledDataSource cpds = new ComboPooledDataSource();
  4. cpds.setDriverClass("com.mysql.cj.jdbc.Driver");
  5. cpds.setJdbcUrl("jdbc:mysql://192.168.8.136:3306/jdbc");
  6. cpds.setUser("root");
  7. cpds.setPassword("root");
  8.  
  9. cpds.setMinPoolSize(5);
  10. cpds.setAcquireIncrement(5);
  11. cpds.setMaxPoolSize(20);
  12.  
  13. // 打开 PreparedStatement 池
  14. cpds.setMaxStatements(180);
  15. cpds.setMaxStatementsPerConnection(10);
  16.  
  17. // 获取连接
  18. System.out.println(cpds.getConnection());
  19.  
  20. cpds.close();
  21. }

2、使用配置文件方式

c3p0 DataSources 可以通过名为 c3p0.properties 的简单 java.util.Properties 文件,通过更高级的 HOCON 配置文件(例如application.conf,application.json)或 XML 格式 c3p0-config.xml 进行配置。

c3p0-config.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <c3p0-config>
  3. <named-config name="helloc3p0">
  4. <!-- 指定连接数据源的基本属性 -->
  5. <property name="user">root</property>
  6. <property name="password">root</property>
  7. <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
  8. <property name="jdbcUrl">jdbc:mysql://192.168.8.136:3306/jdbc</property>
  9. <!-- 若数据库中连接数不足时, 一次向数据库服务器申请多少个连接 -->
  10. <property name="acquireIncrement">5</property>
  11. <!-- 初始化数据库连接池时连接的数量 -->
  12. <property name="initialPoolSize">5</property>
  13. <!-- 数据库连接池中的最小的数据库连接数 -->
  14. <property name="minPoolSize">5</property>
  15. <!-- 数据库连接池中的最大的数据库连接数 -->
  16. <property name="maxPoolSize">10</property>
  17. <!-- C3P0 数据库连接池可以维护的 Statement 的个数 -->
  18. <property name="maxStatements">20</property>
  19. <!-- 每个连接同时可以使用的 Statement 对象的个数 -->
  20. <property name="maxStatementsPerConnection">5</property>
  21. </named-config>
  22. <default-config>
  23. <property name="automaticTestTable">con_test</property>
  24. <property name="checkoutTimeout">30000</property>
  25. <property name="idleConnectionTestPeriod">30</property>
  26. <property name="initialPoolSize">10</property>
  27. <property name="maxIdleTime">30</property>
  28. <property name="maxPoolSize">100</property>
  29. <property name="minPoolSize">10</property>
  30. <property name="maxStatements">200</property>
  31. <user-overrides user="test-user">
  32. <property name="maxPoolSize">10</property>
  33. <property name="minPoolSize">1</property>
  34. <property name="maxStatements">0</property>
  35. </user-overrides>
  36. </default-config>
  37. <!-- This app is massive! -->
  38. <named-config name="intergalactoApp">
  39. <property name="acquireIncrement">50</property>
  40. <property name="initialPoolSize">100</property>
  41. <property name="minPoolSize">50</property>
  42. <property name="maxPoolSize">1000</property>
  43. <!-- intergalactoApp adopts a different approach to configuring statement caching -->
  44. <property name="maxStatements">0</property>
  45. <property name="maxStatementsPerConnection">5</property>
  46. <!-- he's important, but there's only one of him -->
  47. <user-overrides user="master-of-the-universe">
  48. <property name="acquireIncrement">1</property>
  49. <property name="initialPoolSize">1</property>
  50. <property name="minPoolSize">1</property>
  51. <property name="maxPoolSize">5</property>
  52. <property name="maxStatementsPerConnection">50</property>
  53. </user-overrides>
  54. </named-config>
  55. </c3p0-config>
  1. @Test
  2. public void testC3poWithConfigFile() throws Exception {
  3. // named-config
  4. DataSource dataSource = new ComboPooledDataSource("helloc3p0");
  5.  
  6. // 获取连接
  7. System.out.println(dataSource.getConnection());
  8.  
  9. ComboPooledDataSource comboPooledDataSource = (ComboPooledDataSource) dataSource;
  10. // 获取配置
  11. System.out.println(comboPooledDataSource.getMaxStatements());
  12. }

3、使用 DataSources 工厂类

  1. @Test
  2. public void testC3P0Factory() throws Exception {
  3. DataSource ds_unpooled = DataSources.unpooledDataSource("jdbc:mysql://192.168.8.136:3306/jdbc", "root", "root");
  4. Map overrides = new HashMap();
  5. overrides.put("maxStatements", "200");
  6. overrides.put("maxPoolSize", new Integer(50));
  7. DataSource ds_pooled = DataSources.pooledDataSource(ds_unpooled, "intergalactoApp", overrides);
  8.  
  9. System.out.println(ds_pooled.getConnection());
  10.  
  11. // 两种关闭方式
  12. DataSources.destroy(ds_pooled);
  13. if (ds_unpooled instanceof PooledDataSource) {
  14. PooledDataSource pds = (PooledDataSource) ds_unpooled;
  15. pds.close();
  16. } else {
  17. System.err.println("Not a c3p0 PooledDataSource!");
  18. }
  19. }

官方文档

JDBC-C3P0的更多相关文章

  1. JDBC&&c3p0、事务、批处理、多线程 于一体的经典秘方QueryRunner

    目录: 基础篇_功能各自回顾 JDBC基础代码回顾(使用JdbcUtils工具简化) c3p0数据库连接池的使用(使用JdbcUtils工具简化) 大数据的插入(使用c3p0+JdbcUtils工具简 ...

  2. Spring -- spring 中使用jdbc, c3p0连接池, dao概念

    1. 示例代码 CustomerDao.java  ,dao接口 public interface CustomerDao { public void insertCustomer(Customer ...

  3. JSP+Servlet+JDBC+C3P0实现的人力资源管理系统

    项目简介 项目来源于:https://github.com/ruou/hr 本系统基于JSP+Servlet+C3P0+Mysql.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级: ...

  4. c3p0三种配置方式(automaticTestTable)

    c3p0的配置方式分为三种,分别是http://my.oschina.net/lyzg/blog/551331.setters一个个地设置各个配置项2.类路径下提供一个c3p0.properties文 ...

  5. c3p0配置详解

    数据库连接池C3P0框架是个非常优异的开源jar,高性能的管理着数据源,这里只讨论程序本身负责数据源,不讨论容器管理. 一.实现方式: C3P0有三种方式实现: 1.自己动手写代码,实现数据源 例如: ...

  6. C3P0连接池配置方式

    c3p0的配置方式分为三种,分别是 1.setters一个个地设置各个配置项 2.类路径下提供一个c3p0.properties文件 3.类路径下提供一个c3p0-config.xml文件 1.set ...

  7. 分页功能的实现——Jdbc && JSP

    @目录 什么是分页 ? 两个子模块功能的问题分析 和 解决方案 有条件查和无条件查询的影响 和 解决方案 项目案例: mysql + commons-dbutils+itcast-tools+Base ...

  8. Java框架spring 学习笔记(十六):c3p0连接池的配置以及dao使用jdbcTemplate

    连接池可以大大提高数据库的性能和连接速度,将那些已连接的数据库连接存放在一个连接池里,以后别人要连接数据库的时候,将不会重新建立数据库连接,直接从连接池中取出可用的连接,用户使用完毕后,会释放连接重新 ...

  9. 【c3p0】 C3P0的三种配置方式以及基本配置项详解

    数据库连接池C3P0框架是个非常优异的开源jar,高性能的管理着数据源,这里只讨论程序本身负责数据源,不讨论容器管理. ---------------------------------------- ...

  10. JDBC和数据库连接池

    JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成. ​ ● JDBC ​ ● C3P0 ​ ● DRUID 一.JDBC ...

随机推荐

  1. python之旅七【第七篇】面向对象之类成员

    面向对象的类成员 相关知识点 一  字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class Provinc ...

  2. EF code first出现错误:列名 Discriminator 无效

    转载:https://blog.csdn.net/lanse_my/article/details/38128355 前几天使用code first碰到错误:列名 'Discriminator' 无效 ...

  3. Asteroids POJ - 3041 匈牙利算法+最小点覆盖König定理

    题意: 给出一个N*N的地图N   地图里面有K个障碍     你每次可以选择一条直线 消除这条直线上的所有障碍  (直线只能和列和行平行) 问最少要消除几次 题解: 如果(x,y)上有一个障碍 则把 ...

  4. 欧拉筛,线性筛,洛谷P2158仪仗队

    题目 首先我们先把题目分析一下. emmmm,这应该是一个找规律,应该可以打表,然后我们再分析一下图片,发现如果这个点可以被看到,那它的横坐标和纵坐标应该互质,而互质的条件就是它的横坐标和纵坐标的最大 ...

  5. Codeforces Global Round 2 D. Frets On Fire (动态开点线段树,沙雕写法)

    题目链接:D. Frets On Fire 思路:明明可以离散化+二分写,思路硬是歪到了线段树上,自闭了,真实弟弟,怪不得其他人过得那么快 只和查询的区间长度有关系,排完序如果相邻的两个点的差值小于等 ...

  6. Codeforces Round #453 (Div. 1) D. Weighting a Tree(构造)

    题意 一个 \(n\) 个点 \(m\) 条边的无向连通图中每个点都有一个权值,现在要求给每条边定一个权值,满足每个点的权值等于所有相连的边权之和,权值可负. 题解 如果图是一棵树,那么方案就是唯一的 ...

  7. 【转】C++命名空间 namespace的作用和使用解析

    一. 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突. 在 C语言中定义了3个层次的作用域,即文件(编译单元).函数和复合语句.C ...

  8. 【php】php位运算及其高级应用

    我们之前学过逻辑与(&&)      条件1 && 条件2 当两边条件同时成立时候返回1 逻辑或(||)         条件1 || 条件2    当两边条件只要有一 ...

  9. squid详解(正向代理、透明代理、反向代理)

    squid http://www.squid-cache.org/ --官方网址 squid软件主要有两大应用:1,代理上网(正向代理,透明代理) 2,网站静态页面缓存加速(反向代理) 三种代理类型: ...

  10. 源码分析-AutoCloseable

    AutoCloseable 该接口用于try-with-resources语法糖提供支持,用于自动关闭资源作用 类型:接口 方法:close(); 详解: close():用于自动关闭资源的时候需要进 ...