c3p0连接数据库

Posted yl-995820

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c3p0连接数据库相关的知识,希望对你有一定的参考价值。

c3p0连接数据库

c3p0使用过程:

通过ComboPooledDataSource获取数据源ds-->由数据源获取连接对象

导包

  1. 数据库驱动包
  2. c3p0包
  3. mchange-commons-java c3p0数据库连接池的辅助包,如果没有这个包系统启动时会报classnotfoundexception,这是更新c3p0-0.9.2版本后分离出来的包,0.9.1的时候还是只是一个包。

导包存在的问题

c3p0-0.9.1.2及以下的包不需要辅助包,高版本的需要对应的辅助包。

c3p0与JDBC的比较

JDBC:加载驱动,由驱动连接数据库获取连接对象

c3p0:通过ComboPooledDataSource创建数据源,由数据源获取连接对象

? (即将加载驱动和连接数据库进行了封装)

直接获取方式

public class C3p0{
    public static DataSource ds = null;
    static{
        ComboPooledDataSource cpds = new ComboPooledDataSource();
        try{
            cpds.setDriverClass("com.mysql.cj.jdbc.Driver");
     		cpds.setJdbcUrl(
        		 "jdbc:mysql://localhost:3306/test?&useSSL=false&serverTimezone=UTC");
            cpds.setUser("root");
            cpds.setPassword("123");
            cpds.setInitialPoolSize(5);
            cpds.setMaxPoolSize(15);
            ds = cpds;
        }catch(Exception e){
        	System.out.println("获取数据源失败!!!");
        }
    }
}
//通过C3po.ds.getConnection()获取连接对象

读取配置文件方式

.xml或.properties文件名命名:c3p0.properties/c3p0-config.xml

位置:在src目录下

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<!-- 默认 -->
	<default-config>
		<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql:///test?useSSL=false&amp;serverTimezone=UTC</property>
		<property name="user">root</property>
		<property name="password">123</property>
		<property name="checkoutTimeout">3000</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="maxStatements">200</property>		
	</default-config>
	<!-- 自定义名称 
	<name-config name="名称">
		<properties></properties>
	</name-config>
	-->
</c3p0-config>

import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.junit.Test;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3p0Utils {
	private static DataSource ds = null;
	static{
		ds = new ComboPooledDataSource();
	}
	public static Connection getConn() {
		Connection conn = null;
		try {
			conn = ds.getConnection();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}
	
	@Test
	public void Test(){
		System.out.println(C3p0Utils.getConn());
	}
}

以上是关于c3p0连接数据库的主要内容,如果未能解决你的问题,请参考以下文章

C3P0连接池的使用

jdk1.6.0_29的bug导致c3p0获取sqlserver连接时被hang住甚至deadlock问题的分析

数据库连接池c3p0

c3p0数据库连接池管理

C3P0连接池工具类实现步骤及方法

JDBC连接池之C3P0