JDBC学习04-C3P0连接池:下载和使用方法
来源:互联网 发布:网络运营培训班 编辑:程序博客网 时间:2024/06/01 10:21
一、C3P0简介
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
二、C3P0的使用方法
使用第三方工具需要导入jar包,C3P0使用时还需添加配置文件c3p0-config.xml。
0.下载
https://sourceforge.net/projects/c3p0/files/latest/download?source=files下载最新的C3PO包。
下载完成后解压
·doc为说明文档,examples是自带的例子,lib是一些jar包,src是源码jar包。
1.导入jar包
将lib文件夹中c3p0-0.9.5.2.jar和mchange-commons-java-0.2.11.jar导入项目中
2.编写配置文件
配置文件名称:c3p0-config.xml (固定)
配置文件位置:CLASSPATH(WEB-INF/classes、src)
配置文件内容:
default-config和named-config暂时内容相同
<?xml version="1.0" encoding="UTF-8"?><c3p0-config> <default-config> <property name="user">root</property> <property name="password">anitamui</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?useSSL=true</property> <!--以上的user是数据库的用户,password是数据库的密码,driverClass是mysql的数据库驱动,jdbcUrl是连接数据库的url --> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 --> <property name="acquireIncrement">5</property> <!--初始化时获取十个连接,取值应在minPoolSize与maxPoolSize之间 --> <property name="initialPoolSize">10</property> <!--连接池中保留的最小连接数 --> <property name="minPoolSize">10</property> <!--连接池中保留的最大连接数 --> <property name="maxPoolSize">50</property> <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0--> <property name="maxStatements">20</property> <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 --> <property name="maxStatementsPerConnection">5</property> </default-config> <named-config name="mysql"> <property name="user">root</property> <property name="password">anitamui</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?useSSL=true</property> <property name="acquireIncrement">5</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">10</property> <property name="maxPoolSize">50</property> <property name="maxStatements">20</property> <property name="maxStatementsPerConnection">5</property> </named-config></c3p0-config>
3.测试C3P0使用
C3P0中连接池的实现类名ComboPooledDataSource
加载配置文件可以加载默认配置也可以加载带名字的配置,方法在下面代码中
import com.mchange.v2.c3p0.ComboPooledDataSource;import org.junit.Test;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class TestC3p0 { @Test public void testSelect() { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; //1.创建自定义连接池对象 //此种方法加载的配置文件中默认配置default-config ComboPooledDataSource dataSource = new ComboPooledDataSource(); //加载有名称的配置named-config //ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql"); try { //2.从池中获取对象(改造过后) conn = dataSource.getConnection(); //3.编写SQL语句 String sql="select * from fruits where s_id=?"; //4.获取执行sql语句的对象 pstmt = conn.prepareStatement(sql); //5.设置参数 pstmt.setInt(1,104); //6.执行 rs = pstmt.executeQuery(); //7.处理结果集 while (rs.next()){ System.out.println(rs.getString("f_name")); } } catch (SQLException e) { e.printStackTrace(); } finally { if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(pstmt!=null){ try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }}
运行结果
·其中红色字体为日志信息,运行结果为找到s_id等于104的水果名称berry,lemon。
4.编写C3P0工具类
import com.mchange.v2.c3p0.ComboPooledDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.SQLException;/** * C3P0工具类 */public class C3P0Utils { private static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql"); /** * 获取连接池对象 * @return */ public static DataSource getDataSource(){ return dataSource; } /** * 从池中获取连接对象 * @return */ public static Connection getConnection(){ try { return dataSource.getConnection(); } catch (SQLException e) { throw new RuntimeException(e); } } /** * 释放资源 * @param connection */ public static void releaseConnection(Connection connection){ try { if(connection != null ) { connection.close(); } }catch (Exception e) { e.printStackTrace(); } }}
测试工具类的使用
@Test public void testSelect02() { Connection conn = null; DataSource dataSource = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = C3P0Utils.getConnection(); String sql="select * from fruits where s_id=?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1,104); rs = pstmt.executeQuery(); while (rs.next()){ System.out.println(rs.getString("f_name")); } } catch (SQLException e) { e.printStackTrace(); } finally{ C3P0Utils.releaseConnection(conn,pstmt,rs); } }
阅读全文
0 0
- JDBC学习04-C3P0连接池:下载和使用方法
- JDBC学习05-DBCP连接池:下载和使用方法
- JDBC连接池C3P0
- JDBC连接池C3P0
- JDBC连接池C3P0
- jdbc连接dbcp和c3p0
- JDBC-C3P0连接池配置
- JDBC连接池(c3p0)
- JDBC之C3P0连接池
- JDBC连接池 DBCP C3P0
- Java-C3P0连接池使用方法
- 开源JDBC连接池DBCP和C3P0配置小结
- 开源JDBC连接池DBCP和C3P0配置小结
- 开源JDBC连接池DBCP和C3P0配置
- 开源JDBC连接池DBCP和C3P0配置
- JDBC学习笔记—数据库连接池(DBCP和C3P0)
- JAVAWEB开发之事务详解(mysql与JDBC下使用方法、事务的特性、锁机制)和连接池的详细使用(dbcp以c3p0)
- JDBC项目-MySQL 事务、JDBC事务示例、连接池dbcp和c3p0
- Windows7 64+caffe+python2.7+VS2013仅CPU模式
- 菱形继承,二义性和数据冗余
- LINUX编译驱动时报错
- redis 运维实际经验纪录之一
- netcat网猫
- JDBC学习04-C3P0连接池:下载和使用方法
- 生活小记53
- iOS11 instrument和真机测试的新玩法--无线调试模式(connect via network)
- 从零开始学习Docker(二、区分docker环境和docker虚拟机环境)
- 关联容器set map
- 进程控制编程
- JAVA中的反射机制
- 关于log4j和slf4j的使用说明
- python linkedhashset 简单实现,使用OrderedDict