利用c3p0连接池获取数据库连接,即不再通过DriverManager的getConnection(url,user,password)方法获取connection,而是通过c3p0数据源的类来获取连接,可分为两种情况,用或者不用配置文件:
1.不用配置文件,采用硬编码的形式设置连接池参数:
导入c3p0的jar包:c3p0-0.9.5.1.jar以及mchange-commons-java-0.2.1.jar,如果要连接mysql数据库,则要导入mysql-connector-java-5.1.28-bin.jar;如果要连接oracle数据库,则要导入ojdbc6.jar包。
java文件代码为:
ComboPooledDataSource dataSource = new ComboPooledDataSource();//此处不能转为DataSource接口类型,因为该接口没有操作连接属性的set、get方法,就无法采用 //硬编码设置连接池属性
dataSource.setDriverClass("com.mysql.jdbc.Driver");// 指定连接的是哪个数据库
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");// 指定连接的数据库的地址
dataSource.setUser("root");
dataSource.setPassword("123");
dataSource.setAcquireIncrement(5);
dataSource.setInitialPoolSize(20);
dataSource.setMinPoolSize(2);
dataSource.setMaxPoolSize(50);
System.out.println(dataSource);
Connection con = dataSource.getConnection();
System.out.println(con);
// 建表语句是:create table c3p0test(username varchar(255),password varchar(255));
String sql = "insert into c3p0test values (?,?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, "koushr");
ps.setString(2, "1540379851");
ps.execute();
2.利用c3p0配置文件:
首先还是导jar包(同上),其次在src路径下加入c3p0-config.xml文件,注意文件名一定要是这个,里面配置了(初始大小,最小空闲连接数,增量,最大空闲连接数,最大连接数,最大的等待时间等)池参数。注意,粘贴好后需要立即更改要访问的数据库名,这一步最容易忘记。具体池参数则看具体项目更改。
c3p0-config.xml文件内容是:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 默认配置,此处默认配置是mysql数据库的配置 -->
<default-config>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">123</property>
<property name="acquireIncrement">3</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">2</property>
<property name="maxPoolSize">10</property>
</default-config>
<named-config name="oracle-config">
<property name="user">scott</property>
<property name="password">123</property>
<property name="driverClass">oracle.jdbc.OracleDriver</property>
<property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl
</property>
<property name="acquireIncrement">3</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">2</property>
<property name="maxPoolSize">10</property>
</named-config>
</c3p0-config>
java文件代码:
DataSource dataSource = new ComboPooledDataSource(); // 无参代表获取的是c3p0-config.xml文件中default-config的配置,如果想获取其他配置,可以传入配置名 //(string类型)来指定获取的是哪个配置
// 此处可以转为DataSource类型,因为此处不用硬编码设置连接属性
System.out.println(dataSource);
Connection con = dataSource.getConnection();
System.out.println(con);
// 建表语句是:create table c3p0test(username varchar(255),password varchar(255));
String sql = "insert into c3p0test values (?,?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, "koushr");
ps.setString(2, "1540379851");
ps.execute();
备注:ComboPooledDataSource类的层次结构如下,它实现了DataSource接口。