1 <?xml version="1.0" encoding="UTF-8"?>
2
3 -<c3p0-config>
4
5
6 -<default-config>
7
8 <property name="driverClass">com.mysql.jdbc.Driver</property>
9
10 <property name="jdbcUrl">jdbc:mysql://localhost:3306/dataSourceDemo?characterEncoding=UTF8</property>
11
12 <property name="user">root</property>
13
14 <property name="password">root</property>
15
16 <property name="maxPoolSize">15</property>
17
18 <property name="minPoolSize">3</property>
19
20 <property name="initialPoolSize">3</property>
21
22 <property name="acquireIncrement">3</property>
23
24 <property name="maxIdleTime">600</property>
25
26 <property name="checkoutTimeout">0</property>
27
28 </default-config>
29
30 </c3p0-config>

c3po-config.xml

1.导入XML文件

2.使用jdbcutils获取连接池对象

  1 import java.beans.BeanInfo;
2 import java.beans.Introspector;
3 import java.beans.PropertyDescriptor;
4 import java.sql.Connection;
5 import java.sql.PreparedStatement;
6 import java.sql.ResultSet;
7 import java.sql.ResultSetMetaData;
8 import java.sql.SQLException;
9 import java.sql.Statement;
10 import java.util.ArrayList;
11 import java.util.List;
12
13 import javax.sql.DataSource;
14
15 import com.mchange.v2.c3p0.ComboPooledDataSource;
16
17 public class JDBCUtils {
18
19 // 使用C3P0数据库连接池管理数据库连接
20 private static DataSource dataSource = new ComboPooledDataSource();
21
22 // 获取连接
23 public static Connection getConnection() throws SQLException {
24 return dataSource.getConnection();
25 }
26
27 // 关闭连接
28 public static void close(Connection conn) {
29 if (conn != null) {
30 try {
31 conn.close();
32 } catch (SQLException e) {
33 }
34 }
35 }
36
37 // 关闭statement
38 public static void close(Statement stmt) {
39 if (stmt != null) {
40 try {
41 stmt.close();
42 } catch (SQLException e) {
43 }
44 }
45 }
46
47 // 关闭结果集
48 public static void close(ResultSet rs) {
49 if (rs != null) {
50 try {
51 rs.close();
52 } catch (SQLException e) {
53 }
54 }
55 }
56
57 // 关闭结果集、statement、连接
58 public static void closeAll(ResultSet rs) {
59 if (rs == null) {
60 return;
61 }
62 try {
63 close(rs);
64 // 如果先关掉statement再关conn,会抛出“You cannot operate on a closed
65 // Statement!”的异常,导致conn没有关闭
66 close(rs.getStatement().getConnection());
67 close(rs.getStatement());
68
69 } catch (SQLException e) {
70 e.printStackTrace();
71 }
72 }
73
74 // 关闭结果集、statement
75 public static void closeResultSetAndStatement(ResultSet rs) {
76 if (rs == null) {
77 return;
78 }
79 try {
80 close(rs);
81 close(rs.getStatement());
82 } catch (SQLException e) {
83
84 }
85 }
86
87 // 执行insert、update、delete等sql语句
88 public static int executeUpdate(String sql, Object... parameters) throws SQLException {
89 Connection conn = null;
90 try {
91 conn = getConnection();
92 return executeUpdate(conn, sql, parameters);
93 } finally {
94 close(conn);
95 }
96 }
97
98 // 执行insert、update、delete等sql语句
99 public static int executeUpdate(Connection conn, String sql, Object... parameters) throws
100 SQLException {
101 PreparedStatement ps = null;
102 try {
103 ps = conn.prepareStatement(sql);
104 for (int i = 0; i < parameters.length; i++) {
105 ps.setObject(i + 1, parameters[i]);
106 }
107 return ps.executeUpdate();
108 } finally {
109 close(ps);
110 }
111 }
112
113 // 执行查询
114 public static ResultSet executeQuery(String sql, Object... parameters) throws SQLException {
115 Connection conn = null;
116 try {
117 conn = getConnection();
118 return executeQuery(conn, sql, parameters);
119 } catch (SQLException ex) {
120 close(conn);
121 throw ex;
122 }
123 }
124
125 // 执行查询
126 public static ResultSet executeQuery(Connection conn, String sql, Object... parameters) throws
127 SQLException {
128 PreparedStatement ps = null;
129 try {
130 ResultSet rs = null;
131 ps = conn.prepareStatement(sql);
132 for (int i = 0; i < parameters.length; i++) {
133 ps.setObject(i + 1, parameters[i]);
134 }
135 rs = ps.executeQuery();
136 return rs;
137 } catch (SQLException ex) {
138 close(ps);
139 throw ex;
140 }
141 }
142
143 // 回滚
144 public static void rollback(Connection conn) {
145 try {
146 conn.rollback();
147 } catch (SQLException e) {
148
149 }
150 }
151 }

JDBCUtils

jar包  c3p0

C3PO数据库连接池的更多相关文章

  1. java_JDBC,连接数据库方式,RestSet结果集,Statement,PreparedStatement,事务,批处理,数据库连接池(c3p0和Druid)、Apache-DBUtils、

    一.JDBC的概述 1.JDBC为访问不同的数据薛是供了统一的接口,为使用者屏蔽了细节问题.2. Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作 ...

  2. 数据库连接池:Druid

    转自: http://www.cnblogs.com/windlaughing/p/3287501.html Java连接数据库方法概述 java.sql提供了一些接口和类,用于支持数据库增删改查等相 ...

  3. paip.提升性能----数据库连接池以及线程池以及对象池

    paip.提升性能----数据库连接池以及线程池以及对象池 目录:数据库连接池c3po,线程池ExecutorService:Jakartacommons-pool对象池 作者Attilax  艾龙, ...

  4. 转!数据库连接池概念、种类、配置(DBCP\C3P0\JndI与Tomact配置连接池)

    数据库连接池概念.种类.配置(DBCP\C3P0\JndI与Tomact配置连接池) 一.DBCP 连接:DBCP 连接池是 Apache 软件基金组织下的一个开源连接池实现. 需要的 java 包c ...

  5. springboot数据库连接池使用策略

    springboot官方文档介绍数据库连接池的使用策略如下: Production database connections can also be auto-configured using a p ...

  6. 数据库连接池 C3p0

    数据库连接池 C3po 1 定义 本质上是个容器(集合) 存放数据库的连接容器(connection 对象) ,当系统初始化以后 容器就会创建 容器中就会申请一些连接对象 ,当用户来访问数据库的时候 ...

  7. JAVA数据库连接池的革命 -- 从BoneCP到HikariCP

    从BoneCP到HikariCP 今天笔者本想更新一下项目中使用到的BoneCP版本的.却无意发现jolbox网站打不开了.起初以为是被墙掉了,经过一番查找,居然在BoneCP的Github站看到了如 ...

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

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

  9. spring配置datasource三种方式 数据库连接池

    尊重原创(原文链接):http://blog.csdn.net/kunkun378263/article/details/8506355 1.使用org.springframework.jdbc.da ...

随机推荐

  1. Hive Sql的日常使用笔记

    date: 2019-03-22 17:02:37 updated: 2020-04-08 16:00:00 Hive Sql的日常使用笔记 1. distinct 和 group by distin ...

  2. python读取文件遇到问题及解决

    用python的open()函数打开文件时, 1.文件写绝对路径报IOError: [Errno 2] No such file or directory.文件改为相对路径(只写文件名)解决该问题 2 ...

  3. 【Java】阿里巴巴开发规范手册

    Java 开发手册 一. 编程规约 (一) 命名风格 [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name, $name, __name [强制]代码中 ...

  4. Servlet学习笔记(四)

    目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...

  5. Linux 软件安装的三种方式

    Linux 软件安装的三种方式 1.yum ​ 语法格式: ​ yum -y install package.name ​ -y yes # 遇到提示自动输入yes ​ 案例: 安装ifconfig命 ...

  6. 什么是LRU缓存淘汰机制

    LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰.该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历 ...

  7. Spring源码解析之BeanFactoryPostProcessor(一)

    BeanFactoryPostProcessor 在前面几个章节,笔者有介绍过BeanFactoryPostProcessor,在spring在解析BeanDefinition之后,正式初始化bean ...

  8. 【涂鸦物联网足迹】API及SDK介绍

    前序系列文章>>> [涂鸦物联网足迹]物联网主流通信方式 我们系列文章,都会围绕如何完成一款智能"隔空接吻机"的开发.希望能帮到各异地恋or异国恋的情侣们! 本文 ...

  9. 【JVM第七篇】执行引擎

    写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 执行引擎是Java虚拟机中的核心组成部分. 执行引擎的作用就是解析虚拟机字节码指令, ...

  10. http 代理阅读1

    代理模式数据流处理: //配置proxy_pass后,在 ngx_http_core_content_phase 里面指向该函数 /* 那么,当有请求访问到特定的location的时候(假设这个loc ...