c3p0 订阅
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。 展开全文
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。
信息
外文名
c3p0
类    别
开源的JDBC连接池
区别于
dbcp
实现了
数据源和JNDI绑定
开源项目
Hibernate、Spring
支    持
JDBC3规范和JDBC2的标准扩展
c3p0区别介绍
c3p0与dbcp区别dbcp没有自动回收空闲连接的功能c3p0有自动回收空闲连接功能
收起全文
精华内容
参与话题
问答
  • c3p0的基本使用方法

    千次阅读 2018-09-24 00:12:57
    c3p0应该说是十分常用的连接池了,很常用的dao层框架hibernate都是用c3p0的 他的用法相当简便,当然,要懂一点连接数据库的知识作为前提,直接上代码了。 至于jar包,可以直接百度,也可以到这里下载:Java连接...

    c3p0应该说是十分常用的连接池了,很常用的dao层框架hibernate都是用c3p0的

    他的用法相当简便,当然,要懂一点连接数据库的知识作为前提,直接上代码了。

    至于jar包,可以直接百度,也可以到这里下载:Java连接数据库的工具类

    下面是基本用法

    package cn.bl.v4_DataSource.c3p0;
    
    import java.sql.SQLException;
    
    import org.junit.Test;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class Demo1 {
    	
    	/**
    	 * 方式1:使用纯Java方式
    	 * @throws Exception
    	 */
    	@Test
    	public void test1() throws Exception {
    		ComboPooledDataSource source = new ComboPooledDataSource();
    		source.setDriverClass("com.mysql.jdbc.Driver");
    		source.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/aa?useUnicode=true&characterEncoding=utf-8");
    		source.setUser("root");
    		source.setPassword("000");
    		
    		//获取链接
    		System.out.println(source.getConnection());
    		
    		/*输出如下信息(除了最后一行,前面的其实都是自动输出的基本信息):
    			九月 23, 2018 11:40:45 上午 com.mchange.v2.log.MLog <clinit>
    			信息: MLog clients using java 1.4+ standard logging.
    			九月 23, 2018 11:40:45 上午 com.mchange.v2.c3p0.C3P0Registry banner
    			信息: Initializing c3p0-0.9.1.2 [built 21-May-2007 15:04:56; debug? true; trace: 10]
    			九月 23, 2018 11:40:45 上午 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
    			信息: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1hgf2td9y193nu61qxzvdh|160847b, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hgf2td9y193nu61qxzvdh|160847b, idleConnectionTestPeriod -> 0, initialPoolSize -> 2, jdbcUrl -> jdbc:mysql://127.0.0.1:3306/aa?useUnicode=true&characterEncoding=utf-8, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 30, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 10, maxStatements -> 50, maxStatementsPerConnection -> 0, minPoolSize -> 2, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
    			com.mchange.v2.c3p0.impl.NewProxyConnection@d64342
    		 */
    	}
    	
    	@Test
    	public void test2() throws SQLException {
    		//1.空参--默认配置
    		ComboPooledDataSource ds = new ComboPooledDataSource();
    		
    		//2.带参--指定名称的配置
    		//ComboPooledDataSource ds = new ComboPooledDataSource("BarryLee");
    		
    		System.out.println(ds.getConnection());
    		//输出的信息类似test1
    	}
    	
    	/*
    	 * 测试c3p0工具类
    	 */
    	@Test
    	public void testUtil() {
    		System.err.println(C3P0Utils.getConnection());
    	}
    }
    

    下面是配置文件,配置文件一定到放置到src下,命名为:c3p0-config.xml

    <c3p0-config>
    	<!-- 默认配置,如果没有指定则使用这个配置 -->
    	<default-config>
    		<property name="driverClass">com.mysql.jdbc.Driver</property>
    		<property name="jdbcUrl">
    			<![CDATA[jdbc:mysql://127.0.0.1:3306/aa?useUnicode=true&characterEncoding=UTF-8]]>
    		</property>
    		<property name="user">root</property>
    		<property name="password">000</property>
    		<!-- 初始化池大小 -->
    		<property name="initialPoolSize">2</property>
    		<!-- 最大空闲时间 -->
    		<property name="maxIdleTime">30</property>
    		<!-- 最多有多少个连接 -->
    		<property name="maxPoolSize">10</property>
    		<!-- 最少几个连接 -->
    		<property name="minPoolSize">2</property>
    		<!-- 每次最多可以执行多少个批处理语句 -->
    		<property name="maxStatements">50</property>
    	</default-config> 
    	<!-- 命名的配置 -->
    	<named-config name="BarryLee">
    		<property name="driverClass">com.mysql.jdbc.Driver</property>
    		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/aa</property>
    		<property name="user">root</property>
    		<property name="password">000</property>
    		<property name="acquireIncrement">5</property><!-- 如果池中数据连接不够时一次增长多少个 -->
    		<property name="initialPoolSize">100</property>
    		<property name="minPoolSize">50</property>
    		<property name="maxPoolSize">1000</property>
    		<property name="maxStatements">0</property>
    		<property name="maxStatementsPerConnection">5</property> <!-- he's important, but there's only one of him -->
    	</named-config>
    </c3p0-config> 
    

    下面是一个工具类

    package cn.bl.v4_DataSource.c3p0;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class C3P0Utils {
    	private C3P0Utils() {}
    	private static ComboPooledDataSource ds = null;
    	private static ThreadLocal<Connection>tLocal = new ThreadLocal<>();
    	static {
    		ds = new ComboPooledDataSource();//读取默认配置文件
    	}
    	public static DataSource getDataSource() {
    		return ds;
    	}
    	public static Connection getConnection() {
    		Connection con = tLocal.get();
    		if(con==null) {
    			try {
    				con = ds.getConnection();
    				tLocal.set(con);
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		return con;
    	}
    }
    

     

    展开全文
  • c3p0介绍与使用

    万次阅读 2016-03-10 17:19:19
    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。 ①下载 ...

           C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目HibernateSpring等。

    下载

    https://sourceforge.net/projects/c3p0/files/latest/download?source=files下载最新C3PO的二进制包。

    ②以c3p0-0.9.5.2.bin.zip为例,解压得到如下图的目录:


    其中的doc为说明文档,examples是自带的例子,lib是一些jar包,src是源码jar包。

    ③将lib下的c3p0-0.9.5.2.jar和mchange-commons-java-0.2.11.jar导入eclipse中,并在工程的src下新建一个名为c3p0-config.xml,且内容为:

    <?xml version="1.0" encoding="UTF-8"?>

    <c3p0-config>

      <named-config name="mvcApp"> 

          <propertyname="user">root</property>

          <propertyname="password">123456</property>

          <propertyname="driverClass">com.mysql.jdbc.Driver</property>

          <propertyname="jdbcUrl">jdbc:mysql://localhost:3306/java</property>

    <!—以上的user是数据库的用户,password是数据库的密码,driverClassmysql的数据库驱动,jdbcUrl是连接数据库的url -->

           <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 -->

    <propertyname="acquireIncrement">5</property>

    <!--初始化时获取十个连接,取值应在minPoolSizemaxPoolSize之间 -->

    <propertyname="initialPoolSize">10</property>

    <!--连接池中保留的最小连接数 -->

    <propertyname="minPoolSize">10</property>

    <!--连接池中保留的最大连接数 -->

    <propertyname="maxPoolSize">50</property>

    <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatementsmaxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->

    <propertyname="maxStatements">20</property> 

    <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->

    <propertyname="maxStatementsPerConnection">5</property>

      </named-config>

    </c3p0-config>

    ④在工程中新建一个JdbcUtils的工具类,代码如下:

     

    import java.sql.Connection;

    import java.sql.SQLException;

    import javax.sql.DataSource;

    import com.mchange.v2.c3p0.ComboPooledDataSource;

     

    public class JdbcUtils {

           /**

            * 释放连接

            * @param connection

            */

           public staticvoid releaseConnection(Connection connection){

                  try {

                         if(connection != null ) {

                                connection.close();

                         }

                  }catch (Exception e) {

                         e.printStackTrace();

                  }

           }

           privatestatic DataSource dataSource = null;

           static{

                  //dataSource资源只能初始化一次

                  dataSource= new ComboPooledDataSource("mvcApp");

           }

           /**

            * 获取连接

            * @return

            * @throws SQLException

            */

           public staticConnection getConnection() throws SQLException{

                  returndataSource.getConnection();

           }

    }

    其中的mvcAppc3p0-config.xmlnamed-configname值。DataSource的实例使用ComboPooledDataSource来生成的,这样我们就可以创建一个连接池,从而减少数据库连接时间。

    最后,c3p0相似的dbcpproxool连接池,详见:

    dbcp:http://baike.baidu.com/view/920072.htm

    proxoolhttp://baike.baidu.com/view/2098784.htm

    展开全文
  • 数据库连接池C3P0详细介绍

    千次阅读 2018-06-14 12:08:51
    数据库连接池 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有... C3P0:是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的...

    数据库连接池

      数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

      

      C3P0:是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3jdbc2扩展规范说明的Connection Statement 池的DataSources 对象。C3p0拥有比DBCP更丰富的配置属性

        使用:

        导包

        

        

      导入配置文件(不是必须的,但是在企业里面一定使用配置文件,如果不使用配置文件,就要在代码中设置四个属性(name,password,driverClass,jdbcURL),项目分为开发环境和运营环境,在开发时,开发人员接触不到公司实际数据库。数据库是机密。但是开发后也要更改数据库,但是不需要更改密码,就是需要使用配置文件)

        

        

      导入自己写的工具类(具有初始化连接池,获得连接的方法)

        

        

        在dao中使用工具类获得连接,或者连接池(有的工具类可以自动帮我们去创建连接)

        比如dbutil工具类

        

        

        Java中的一些键值对的配置文件专门提供了这样的类和文件名

        Properties文件名后缀

        

        

        读取配置文件

        1. 将配置文件变成流

        2. java提供的properties类去加载这个流

        3. 调用properties对象的getProperty的方法,这个方法需要一个参数 键名返回的是一个值(字符串型)

        

        

        

        







    展开全文
  • C3P0连接池的三种实现方式

    万次阅读 2016-06-01 11:05:31
    用到的jar包:  mysql-connector-java-5.1.30-bin.jar  c3p0-0.9.5.2.jar  mchange-commons-java-0.2.11.jar 直接设置参数: C3P0Inner.java  package com.song.c3p0

    用到的jar包:

                     mysql-connector-java-5.1.30-bin.jar

                     c3p0-0.9.5.2.jar

                     mchange-commons-java-0.2.11.jar


    直接设置参数:

    C3P0Inner.java 

    package com.song.c3p0.db.inner;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class C3P0Inner {
    	
    	private static ComboPooledDataSource ds;
    	
    	//静态初始化块进行初始化
    	static{
    		try {
    			ds = new ComboPooledDataSource();//创建连接池实例
    			
    			ds.setDriverClass("com.mysql.jdbc.Driver");//设置连接池连接数据库所需的驱动
    			
    			ds.setJdbcUrl("jdbc:mysql://localhost:3306/cloudhospital");//设置连接数据库的URL
    			
    			ds.setUser("root");//设置连接数据库的用户名
    			
    			ds.setPassword("admin");//设置连接数据库的密码
    			
    			ds.setMaxPoolSize(40);//设置连接池的最大连接数
    			
    			ds.setMinPoolSize(2);//设置连接池的最小连接数
    			
    			ds.setInitialPoolSize(10);//设置连接池的初始连接数
    			
    			ds.setMaxStatements(100);//设置连接池的缓存Statement的最大数			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
    	//获取与指定数据库的连接
    	public static ComboPooledDataSource getInstance(){
    		return ds;
    	} 
    
    	//从连接池返回一个连接
    	public static Connection getConnection(){
    		Connection conn = null;
    		try {
    			conn = ds.getConnection();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return conn;
    	}
    	
    	//释放资源
    	public static void realeaseResource(ResultSet rs,PreparedStatement ps,Connection conn){
    		if(null != rs){
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		
    		if(null != ps){
    			try {
    				ps.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    
    		try {
    			conn.close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    }

    C3P0InnerMain.java

    package com.song.c3p0.db.inner;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class C3P0InnerMain {
    
    	public PreparedStatement setStatement(Connection conn,String sql){
    		PreparedStatement ps = null;
    		try {
    			ps = conn.prepareStatement(sql);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return ps;
    	}
    	
    	public PreparedStatement setParameter(PreparedStatement ps,Object...values){
    		try {
    			if(null != values){
    				for(int i=1;i<=values.length;i++){
    					ps.setObject(i, values[i-1]);
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return ps;
    	}
    	
    	public static void main(String[] args) {
    		Connection conn = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    		try {
    			conn = C3P0Inner.getConnection();
    			
    			C3P0InnerMain c3P0InnerMain = new C3P0InnerMain();
    			
    			String sql = "SELECT * FROM tb_user WHERE ID < ? ";
    			
    			ps = c3P0InnerMain.setStatement(conn, sql);
    			ps = c3P0InnerMain.setParameter(ps, new Object[]{20});
    			
    			rs = ps.executeQuery();
    			
    			while(rs.next()){
    				Object ob = rs.getObject(1);
    				Object name = rs.getObject(4);
    				System.out.println("ID: " + ob + ",NAME:" + name);
    			}
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally{
    			//释放资源
    			C3P0Inner.realeaseResource(rs, ps, conn);
    		}
    	}
    }
    

    用配置文件设置参数:

    1.从配置文件中逐条获取参数

    config.properties

    DriverClass = com.mysql.jdbc.Driver
    JdbcUrl = jdbc:mysql://localhost:3306/cloudhospital
    User = root
    Password = admin
    MaxPoolSize = 20
    MinPoolSize = 2
    InitialPoolSize = 5
    MaxStatements = 30
    MaxIdleTime = 100

    C3P0Properties.java

    package com.song.c3p0.db.properties;
    
    import java.sql.Connection;
    import java.util.Properties;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class C3P0Properties {
    
    	private ComboPooledDataSource cpds;
    	
    	private static C3P0Properties c3P0Properties;
    	
    	static{
    		c3P0Properties = new C3P0Properties();
    	}
    
    	public C3P0Properties() {
    		try {
    			cpds = new ComboPooledDataSource();
    			
    			//加载配置文件
    			Properties props = new Properties();
    			props.load(C3P0Properties.class.getClassLoader().getResourceAsStream("config.properties"));
    			
    			cpds.setDriverClass(props.getProperty("DriverClass"));
    			cpds.setJdbcUrl(props.getProperty("JdbcUrl"));
    			cpds.setUser(props.getProperty("User"));
    			cpds.setPassword(props.getProperty("Password"));
    			
    			cpds.setMaxPoolSize(Integer.parseInt(props.getProperty("MaxPoolSize")));
    			cpds.setMinPoolSize(Integer.parseInt(props.getProperty("MinPoolSize")));
    			cpds.setInitialPoolSize(Integer.parseInt(props.getProperty("InitialPoolSize")));
    			cpds.setMaxStatements(Integer.parseInt(props.getProperty("MaxStatements")));
    			cpds.setMaxIdleTime(Integer.parseInt(props.getProperty("MaxIdleTime")));
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public static C3P0Properties getInstance(){
    		return c3P0Properties;
    	}
    	
    	public Connection getConnection(){
    		Connection conn = null;
    		try {
    			conn = cpds.getConnection();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return conn;
    	}
    }
    

    C3POPropertiesMain.java

    package com.song.c3p0.db.properties;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class C3POPropertiesMain {
    
    	public PreparedStatement getPrepareStatement(Connection conn,String sql){
    		PreparedStatement ps = null;
    		try {
    			ps = conn.prepareStatement(sql);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return ps;
    	}
    	
    	public PreparedStatement setPrepareStatementParameter(PreparedStatement ps,Object... values){
    		try {
    			if (null != values) {
    				for (int i = 1; i <= values.length; i++) {
    					ps.setObject(i, values[i - 1]);
    				}
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return ps;
    	}
    	
    	//释放资源
    	public static void realeaseResource(ResultSet rs,PreparedStatement ps,Connection conn){
    		if(null != rs){
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		
    		if(null != ps){
    			try {
    				ps.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    
    		try {
    			conn.close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public static void main(String[] args) {
    		Connection conn = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    		try {
    			conn = C3P0Properties.getInstance().getConnection();
    			
    			String sql = "SELECT * FROM tb_user WHERE ID < ? ";
    			
    			C3POPropertiesMain c3p0Instance = new C3POPropertiesMain();
    			
    			ps = c3p0Instance.getPrepareStatement(conn, sql);
    			c3p0Instance.setPrepareStatementParameter(ps, new Object[]{20});
    			
    			rs = ps.executeQuery();
    			
    			while(rs.next()){
    				Object obj1 = rs.getObject(1);
    				Object obj4 = rs.getObject(4);
    				
    				System.out.println("ID: " + obj1 + ",NAME: " + obj4);
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}finally{
    			//释放资源
    			C3POPropertiesMain.realeaseResource(rs, ps, conn);
    		}
    	}
    }
    

    2.不用显式的从配置文件中获取参数

    c3p0.properties

    c3p0.driverClass = com.mysql.jdbc.Driver
    c3p0.jdbcUrl = jdbc:mysql://localhost:3306/cloudhospital
    c3p0.user = root
    c3p0.password = admin
    c3p0.maxPoolSize = 20
    c3p0.minPoolSize = 3
    c3p0.maxStatements = 30
    c3p0.maxIdleTime = 150

    C3P0PropertiesSimplify.java

    package com.song.c3p0.db.properties;
    
    import java.sql.Connection;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class C3P0PropertiesSimplify {
    	
    	private static C3P0PropertiesSimplify c3P0PropertiesSimplify;
    	
    	private ComboPooledDataSource cpds;
    	
    	static{
    		c3P0PropertiesSimplify = new C3P0PropertiesSimplify();
    	}
    
    	public C3P0PropertiesSimplify() {
    		cpds = new ComboPooledDataSource();
    	}
    	
    	public static C3P0PropertiesSimplify getInstance(){
    		return c3P0PropertiesSimplify;
    	}
    	
    	public Connection getConnection(){
    		Connection conn = null;
    		try {
    			conn = cpds.getConnection();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return conn;
    	}
    }
    

    C3P0PropertiesSimplifyMain.java

    package com.song.c3p0.db.properties;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class C3P0PropertiesSimplifyMain {
    
    	public PreparedStatement createStatement(Connection conn,String sql){
    		PreparedStatement ps = null;
    		try {
    			ps = conn.prepareStatement(sql);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return ps;
    	}
    	
    	public PreparedStatement setParameters(PreparedStatement ps,Object...values){
    		try {
    			if(null != values){
    				for(int i=1;i<=values.length;i++){
    					ps.setObject(i, values[i-1]);
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return ps;
    	}
    	
    	public static void main(String[] args) {
    		Connection conn = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    		try {
    			conn = C3P0PropertiesSimplify.getInstance().getConnection();
    			
    			C3P0PropertiesSimplifyMain c3p0Instance = new C3P0PropertiesSimplifyMain();
    			String sql = "SELECT * FROM tb_user WHERE ID < ? ";
    			ps = c3p0Instance.createStatement(conn, sql);
    			ps = c3p0Instance.setParameters(ps, new Object[]{20});
    			
    			rs = ps.executeQuery();
    			while(rs.next()){
    				Object obj1 = rs.getObject(1);
    				Object obj4 = rs.getObject(4);
    				
    				System.out.println("ID: " + obj1 + ",Name: " + obj4);
    			}
    		} catch (Exception e) {
    		}finally{
    			try {
    				if(null != rs){
    					try {
    						rs.close();
    					} catch (SQLException e) {
    						e.printStackTrace();
    					}
    				}
    				
    				if(null != ps){
    					try {
    						ps.close();
    					} catch (SQLException e) {
    						e.printStackTrace();
    					}
    				}
    				
    				try {
    					conn.close();
    				} catch (SQLException e) {
    					e.printStackTrace();
    				}
    			} catch (Exception e2) {
    				e2.printStackTrace();
    			}
    		}
    	}
    }
    

    用xml文件设置参数:

    c3p0-config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
    	<named-config name="myc3p0xml">
    		<property name="driverClass">com.mysql.jdbc.Driver</property>
    		<property name="jdbcUrl">jdbc:mysql://localhost:3306/cloudhospital</property>
    		<property name="user">root</property>
    		<property name="password">admin</property>
    		<property name="maxPoolSize">20</property>
    		<property name="minPoolSize">3</property>
    		<property name="maxStatements">30</property>
    		<property name="maxIdleTime">150</property>
    	</named-config>
    </c3p0-config>

    C3P0XmlSimplify.java
    package com.song.c3p0.db.xml;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class C3P0XmlSimplify {
    	
    	private static C3P0XmlSimplify c3P0XmlSimplify;
    
    	private ComboPooledDataSource cpds;
    	
    	static{
    		c3P0XmlSimplify = new C3P0XmlSimplify();
    	}
    
    	public C3P0XmlSimplify() {
    		cpds = new ComboPooledDataSource("myc3p0xml");
    	}
    	
    	public static C3P0XmlSimplify getInstance(){
    		return c3P0XmlSimplify;
    	}
    	
    	public Connection getConnection(){
    		Connection conn = null;
    		try {
    			conn = cpds.getConnection();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return conn;
    	}
    	
    	public static PreparedStatement setStatement(Connection conn, String sql){
    		PreparedStatement ps = null;
    		try {
    			ps = conn.prepareStatement(sql);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return ps;
    	}
    	
    	
    	public static PreparedStatement setSQLParameters(PreparedStatement ps,Object...values){
    		try {
    			if (null != values) {
    				for (int i = 1; i <= values.length; i++) {
    					ps.setObject(i, values[i-1]);
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return ps;
    	}
    	
    	public static void releaseSources(Connection conn, PreparedStatement ps, ResultSet rs){
    		if(null != rs){
    			try {
    				rs.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		
    		if(null != ps){
    			try {
    				ps.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		
    		if(null != conn){
    			try {
    				conn.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }
    

    C3P0XmlSimplifyMain.java
    package com.song.c3p0.db.xml;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    public class C3P0XmlSimplifyMain {
    
    	public static void main(String[] args) {
    		Connection conn = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    		try {
    			conn = C3P0XmlSimplify.getInstance().getConnection();
    			
    			String sql = " SELECT * FROM tb_user WHERE ID < ? ";
    			ps = C3P0XmlSimplify.setStatement(conn, sql);
    			ps = C3P0XmlSimplify.setSQLParameters(ps, new Object[]{20});
    			
    			rs = ps.executeQuery();
    			
    			while(rs.next()){
    				Object obj1 = rs.getObject(1);
    				Object obj4 = rs.getObject(4);
    				
    				System.out.println("ID: " + obj1 + ",Name: " + obj4);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally{
    			C3P0XmlSimplify.releaseSources(conn, ps, rs);
    		}
    	}
    }
    展开全文
  • 最新c3p0所有jar包(完整版)

    万次阅读 多人点赞 2018-08-27 00:15:41
    C3P0地址:https://sourceforge.net/projects/c3p0/?source=navbarC3P0是一个开源的连接池。Hibernate框 架,默认推荐使用C3P0作为连接池实现。 C3P0的jar包: 百度网盘下载链接:...
  • c3p0

    千次阅读 2019-09-24 19:36:55
    c3p0 c3p0是一个开源的JDBC连接池,它相对于DBCP和Druid来说有一个更方便的配置连接方式,就是自动读取配置文件。配置文件名:c3p0-config.xml,放置与src目录下。配置文件的demo如下: <?xml version="1.0" ...
  • C3P0

    千次阅读 2018-08-22 19:29:27
    C3P0 C3P0是一个开源的JDBC连接池,目前使用它的开源项目有Hibernate,Spring等。 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从...
  • c3p0简介及简单案例

    千次阅读 2016-11-04 11:26:28
    c3p0简介及简单案例
  • Java-c3p0原生写法

    万次阅读 2018-08-01 15:57:56
    2.新建c3p0-config.xml文件 3.新建JDBCUtil工具类 4.数据库操作 简易版的c3p0连接。 1.项目整体结构 这里的两个c3p0jar包必须有。 可以去http://mvnrepository.com/搜索jar包名下载,别浪费积分去csdn里面...
  • C3P0连接池配置详解C3P0连接池配置详解C3P0连接池配置详解C3P0连接池配置详解
  • c3p0连接池例子

    千次阅读 2020-06-24 17:45:04
    名称:c3p0.properties或者c3p0-config.xml 路径:根路径,直接把文件放在src目录下即可 这里我们使用c3p0-config.xml <c3p0-config> <!-- 使用默认的配置读取连接池对象 --> <default...
  • c3p0连接池

    2016-12-11 22:40:42
    c3p0的配置方式分 setters一个个地设置各个配置项 类路径下提供一个c3p0.properties文件 类路径下提供一个c3p0-config.xml文件 1. setters一个个地设置各个配置项这种方式最繁琐,形式一般是这样Properties props = ...
  • C3P0连接池的配置与使用

    万次阅读 2019-03-22 23:08:01
    连接池的作用:连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。 基本原理是这样的: (1)建立...
  • C3P0连接池

    千次阅读 2018-04-06 22:21:13
    1. C3P0 C3P0是一个开源的JDBC连接池,目前使用它的开源项目有Hibernate,Spring等。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需...
  • C3P0连接池配置

    万次阅读 2011-10-04 09:46:52
    C3P0是一个开源的JDBC连接池。 在Spring中,C3P0的一些配置,介绍如下(只列了一部分,不是全部)
  • c3p0连接池与源码

    2017-05-04 17:52:21
    c3p0连接池的源码,与连接池包,以及帮助文档。需要的下载。
  • c3p0数据库连接池配置总结

    万次阅读 多人点赞 2018-07-04 20:50:53
    c3p0方法配置 c3p0配置文件配置 前言 关于c3p0一般有这么两种配置,一种是通过set方法进行配置,另一种是通过在同src目录下的c3p0-conflg.xml文件或者c3p0.properties文件进行相关的配置。 c3p0通过set...
  • c3p0连接池配置模板,SSM中使用c3p0连接池配置属性

    千次阅读 热门讨论 2020-10-17 17:43:02
    文章目录SSM使用c3p0连接池配置c3p0.properties属性文件Spring核心配置文件中配置applicationContext.xml2. c3p0-config.xml SSM使用c3p0连接池 配置c3p0.properties属性文件 #c3p0连接池属性文件 # 四大基本信息 c3...
  • C3P0连接池配置文档

    千次阅读 2018-08-16 17:18:52
    配置文件名称:c3p0-config.xml (固定) 配置文件路径:src (类路径) 配置文件内容:命名配置 &lt;c3p0-config&gt; &lt;!-- 命名的配置 --&gt; &lt;named-config name="test"&...
  • Spring入门之C3P0连接池

    2018-01-26 04:42:14
    本文讲解Spring配置c3p0连接池操作 本文通过新建项目的形式讲解,并非讲解c3p0连接池原理 连接的是MySQL数据库 环境 Intellij IDEA 2017 CI 具体步骤 1、新建Spring项目 新建Spring项目,并创建相关类、...

空空如也

1 2 3 4 5 ... 20
收藏数 174,031
精华内容 69,612
关键字:

c3p0