关于数据源,接下来介绍第二种,这种不是apache出来的,也是需要添加jar包,然后配置文件是xml格式,然后写工具类,和前面差不多,本篇创建一个JAVA工程来练习下这个数据源的基本创建和使用过程。
1.添加jar文件
在这个java工程,新建一个lib文件夹,然后去maven网站 搜索C3P0下载https://mvnrepository.com/artifact/c3p0/c3p0/0.9.1.2
这个jar包需要添加到build path中library, 还有一个包也需要添加到这里,前面我们一直用到的jdbc驱动包,mysql-connector-xxx.jar。
2.配置文件
在src下新建一个c3p0-config.xml文件,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/j2ee</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">10</property>
<property name="maxPoolSize">30</property>
<property name="minPoolSize">10</property>
</default-config>
</c3p0-config>
3.工具类代码
package com.anthony.datasource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Utils {
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw new ExceptionInInitializerError("初始化失败,请检查配置文件");
}
}
public void release(Connection conn, Statement stmt, ResultSet rs) {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null; //赶紧垃圾回收
}
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
}
下面来写一个测试类来使用下这个C3P0Utils.java工具类。
package com.anthony.test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.junit.Test;
import com.anthony.datasource.C3P0Utils;
public class TestJDBC {
@Test
public void test() {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = C3P0Utils.getConnection();
ps = conn.prepareStatement("select * from users");
rs = ps.executeQuery();
while(rs.next()) {
System.out.println(rs.getObject("username"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
C3P0Utils.release(conn, ps, rs);
}
}
}
运行结果
Tom
Anthony
能查询出结果,说明C3P0Utils.java这个工具类封装的没有问题。