C3P0开源数据库连接池的编写源码
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
所有上面的代码可以写为:
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,也可以用默认的,如果没有指定则为默认的。