C3P0代码分析
public class DBManager_c3p0 {
// 第一步:静态初始化快,加载配置文件
private static ComboPooledDataSource ds =null;
static {
利用xml中的文件
ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc");
ds.setUser("root");
ds.setPassword("qiao");
ds.setInitialPoolSize(10);
ds.setMaxPoolSize(50);
ds.setMinPoolSize(10);
}
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
// 是把资源归还到连接池中
public static void release(Connection con, PreparedStatement st,
ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
rs = null;
}
if (con != null) {
try {
con.close();
} catch (Exception e) {
e.printStackTrace();
}
con = null;
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注:最核心的地方就是静态初始化(static)里的东西,也就相当于是配置文件中的数值设置,即是数据库的连接,我们完全可以把这么数据写成一个xml文档,用来存储这些数据,xml文档为c3p0-config.xml
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property>
<property name="user">root</property>
<property name="password">qiao</property>
<property name="automaticTestTable">con_test</property>
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
<!-- This app is massive! -->
<named-config name="mysql">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property>
<property name="user">root</property>
<property name="password">qiao</property>
<property name="acquireIncrement">50</property>
<property name="initialPoolSize">100</property>
<property name="minPoolSize">50</property>
<property name="maxPoolSize">1000</property>
</named-config>
</c3p0-config>
所有上面的代码可以写为:
public class DBManager_c3p0 {
// 第一步:静态初始化块,加载配置文件
private static ComboPooledDataSource ds =null;
static {
//利用xml中的文件
ds = new ComboPooledDataSource("mysql");
}
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
// 是把资源归还到连接池中
public static void release(Connection con, PreparedStatement st,
ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
rs = null;
}
if (con != null) {
try {
con.close();
} catch (Exception e) {
e.printStackTrace();
}
con = null;
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注:ds = new ComboPooledDataSource("mysql");中的参数是xml文档中的命名的name,也可以用默认的,如果没有指定则为默认的。