JDBC之C3P0數據庫連接池
1 首先在src中創建c3p0-config.xml 配置文件,文件中內容如下(首先下載C3P0.jar工具包 並放入項目環境變量中)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<c3p0-config>
<!--下面四個是數據庫連接必須需要的東西 -->
<named-config name="MySQL"> <!--爲你的數據庫起一個名字,我的叫MySQL -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:localhost:3306/jdbc_01</property>
<property name="user">root</property> <!--數據庫賬號 -->
<property name="password">root</property> <!--數據庫密碼 -->
<!-- 若數據庫鏈接數量不足的時候,向數據庫申請的連接數量 -->
<property name="acquireIncrement">5</property>
<!-- 初始化數據庫連接池連接的數量 -->
<property name="initialPoolSize">10</property>
<!-- 數據庫連接池中最小連接數 -->
<property name="minPoolSize">5</property>
<!-- 數據庫連接池中最大連接數 -->
<property name="maxPoolSize">100</property>
<!-- C3P0數據庫連接池可以維護的Statement的數量 -->
<property name="maxStatements">2</property>
<!-- 每個連接可同時使用Statement的數量 -->
<property name="maxStatementsPerConnection">5</property>
</named-config>
</c3p0-config>
2 創建一個工具類用於利用C3P0數據庫連接池獲得數據庫連接 工具類如下
package cn.qhy.jdbc;
import java.io.IOException;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class MyDBUtils {
private static DataSource dataSource;
static {// 靜態代碼塊,只執行一次
dataSource = new ComboPooledDataSource("MySQL");
}
/**
*
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
/**
* 通用的用來關閉數據有關的所有的資源的操作
*/
public static void close(Connection conn, Statement sta, ResultSet re) {
if (re != null)
try {
re.close();
} catch (SQLException e) {
e.printStackTrace();
}
if (sta != null)
try {
sta.close();
} catch (SQLException e) {
e.printStackTrace();
}
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3 創建測試類,測試C3P0是否連接數據庫(利用JUnit單元測試)
package cn.qhy.test;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;
import org.junit.jupiter.api.Test;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import cn.qhy.jdbc.MyDBUtils;
public class C3P0Test {
/**
* @throws SQLException
*
*/
@Test
public void c3p0xmlTest() throws SQLException {
Connection conn = MyDBUtils.getConnection();
System.out.println(conn);
conn.close();
}
}
結果如下