1.導入jar包
c3p0-0.9.1.jar
mchange-commons-java-0.2.3.4(注:該jar包是c3p0數據庫連接池的輔助包,沒有這個包系統啟動的時候會報classnotfoundexception,這是c3p0-0.9.2版本后分離出來的包,0.9.1的時候還是一個包就搞定的)
2.獲取連接
C3P0有三種方式 實現。
1.自己動手寫代碼,實現數據源
例如:在類路徑下配置一個屬性文件,config.properties,內容如下:
driverClass=xxx
jdbcUrl=xxx
user=xxx
password=xxx
...
然后代碼中實現
Properties props = new Properties();
InputStream in = Thread.class.getResourceAsStream("config.properties");
props.load(in);
in.close();
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass(props.getProperty("driverClass"));
cpds.setJdbcUrl(props.getProperty("jdbcUrl"));
cpds.setUser(props.getProperty("user"));
cpds.setPassword(props.getProperty("password"));
2.配置默認的熟悉文件
類路徑下提供一個c3p0.properties文件(不能改名)
配置如下:
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost/paper_tag
c3p0.user=root
c3p0.password=admin
3.路徑下提供一個c3p0-config.xml文件
<c3p0-config>
<default-config>
<property name="user">root</property>
<property name="password">java</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
</default-config>
<named-config name="mySource">
<property name="user">root</property>
<property name="password">java</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
</named-config>
</c3p0-config>
這里我采用的是最簡單的第二種方式。
package c3p0;
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Util {
private static ComboPooledDataSource ds = new ComboPooledDataSource();
public static Connection getConn() {
try {
return ds.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
對於這種配置,如果classpath中有c3p0.properties的配置文件,代碼中不需要設置連接信息,直接new ComboPooledDataSource(),他會自動讀取配置文件中的配置。當然也可以使用c3p0-config.xml文件配置連接信息,使用xml作為配置信息的話,comboPoolDataSource還可以接受一個String參數,這個參數的名稱是在c3p0-config.xml文件中配置,這就意味着我們可以在xml文件中可有都多個數據庫源連接信息,比如可以是mysql,oracle的。
