使用mysql的c3p0
除了c3p0.jar还要使用
Mchange Commons Java这里面的jar
我们应该知道mchange-commons包是c3p0数据库连接池的辅助包,如果没有这个包系统启动时会报classnotfoundexception,这是更新c3p0-0.9.2版本后分离出来的包,0.9.1的时候还是只是一个包,但是我加了mchange-commons包还是报包错,那就是辅助包与c3p0包不兼容了
写c3p0-config.properties文件
测试c3p0类
输出:
最后补充一个之前写DBCP连接池的错误
就是第二个使用property配置属性的时候
里面配置属性命名问题都要小写,不然链接会报错:
Caused by: java.sql.SQLException: Access denied for user ''@'localhost' (using password: YES)
报错截图
改正后正确运行截图
代码:
C3P0Demp
package com.yanqun.util;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.sql.SQLException;
public class C3P0Demp {
public static DataSource getDataSourceWithC3P0() throws PropertyVetoException {
ComboPooledDataSource c3p0=new ComboPooledDataSource();
c3p0.setDriverClass("com.mysql.cj.jdbc.Driver");
c3p0.setJdbcUrl("jdbc:mysql://localhost:3306/goods");
c3p0.setUser("root");
c3p0.setPassword("123456");
return c3p0;
}
public static DataSource getDataSourceWithC3P0ByXml() throws PropertyVetoException {
ComboPooledDataSource c3p0=new ComboPooledDataSource("yanqun");
return c3p0;
}
public static void main(String[] args) throws PropertyVetoException, SQLException {
System.out.println(getDataSourceWithC3P0().getConnection());
System.out.println("========================================");
System.out.println(getDataSourceWithC3P0ByXml().getConnection());
}
}
DataSourceUtil
package com.yanqun.util;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.io.InputStream;
import java.util.Properties;
public class DataSourceUtil {
//硬编码
public static DataSource getDataSourceWithDBCP(){
BasicDataSource dbcp=new BasicDataSource();
dbcp.setDriverClassName("com.mysql.cj.jdbc.Driver");
dbcp.setUrl("jdbc:mysql://localhost:3306/goods");
dbcp.setUsername("root");
dbcp.setPassword("123456");
dbcp.setInitialSize(20);
dbcp.setMaxActive(10);
return dbcp;
}
public static DataSource getDataSourceWithDBCPByProperties() throws Exception {
DataSource dbcp=null;
Properties props=new Properties();
//将字符串变成一个输入流
InputStream input = new DBCPDemo().getClass().getClassLoader().getResourceAsStream("dbcpconfig.properties");
//因为load需要一个流的形式,而我们properties的path是一个字符串
//所以需要将一个字符串类型的数据转成流的形式
props.load(input);
dbcp= BasicDataSourceFactory.createDataSource(props);
return dbcp;
}
//c3p0数据连接池
public static DataSource getDataSourceWithC3P0() throws PropertyVetoException {
ComboPooledDataSource c3p0=new ComboPooledDataSource();
c3p0.setDriverClass("com.mysql.cj.jdbc.Driver");
c3p0.setJdbcUrl("jdbc:mysql://localhost:3306/goods");
c3p0.setUser("root");
c3p0.setPassword("123456");
return c3p0;
}
public static DataSource getDataSourceWithC3P0ByXml() throws PropertyVetoException {
ComboPooledDataSource c3p0=new ComboPooledDataSource("yanqun");
return c3p0;
}
}
DBCPDemo
package com.yanqun.util;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;
public class DBCPDemo {
//硬编码
public static DataSource getDataSourceWithDBCP(){
/*
private static final String URL = "jdbc:mysql://localhost:3306/goods";
private static final String USERNAME = "root";
private static final String PWD = "123456";
//通过jdbc存储二进制类型
// 设置Blob类型:
public static void blobDemo() {//增删改
PreparedStatement pstmt = null;
Connection connection = null;
try {
// a.导入驱动,加载具体的驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
*/
BasicDataSource dbcp=new BasicDataSource();
dbcp.setDriverClassName("com.mysql.cj.jdbc.Driver");
dbcp.setUrl("jdbc:mysql://localhost:3306/goods");
dbcp.setUsername("root");
dbcp.setPassword("123456");
dbcp.setInitialSize(20);
dbcp.setMaxActive(10);
return dbcp;
}
public static DataSource getDataSourceWithDBCPByProperties() throws Exception {
DataSource dbcp=null;
Properties props=new Properties();
//将字符串变成一个输入流
InputStream input = new DBCPDemo().getClass().getClassLoader().getResourceAsStream("dbcpconfig.properties");
//因为load需要一个流的形式,而我们properties的path是一个字符串
//所以需要将一个字符串类型的数据转成流的形式
props.load(input);
dbcp=BasicDataSourceFactory.createDataSource(props);
return dbcp;
}
public static void main(String[] args) throws Exception {
// System.out.println(DataSourceUtil.getDataSourceWithDBCPByProperties().getConnection());
System.out.println(getDataSourceWithDBCPByProperties().getConnection());
}
}
c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="user">root</property>
<property name="password">123456</property>
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/goods</property>
<property name="checkoutTimeout">30000</property>
</default-config>
<name-config name="yanqun">
<property name="user">root</property>
<property name="password">123456</property>
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/goods</property>
<property name="checkoutTimeout">20000</property>
</name-config>
</c3p0-config>
dbcpconfig.properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/goods
username=root
password=123456
initialSize=10