前提概要:
c3p0是一种开源的数据源,也是hibernate推荐使用的数据源。这里我们只使用应用程序单独测试下这两种数据源,有兴趣的同学可以整合下服务器再测试下这两种数据源。dbcp也是一种开源的数据源,不过性能上并没有c3p0那样好,所以我们一般推荐使用c3p0。我们通常说的连接池是包含在数据源中,数据源通常包含连接池和连接池管理。
下面根据eg测试下这两种数据源单独在应用程序中的具体使用。 在文章的最后,我们附上这两种数据源的jar文件。
1.c3p0
工具类:
c3p0是一种开源的数据源,也是hibernate推荐使用的数据源。这里我们只使用应用程序单独测试下这两种数据源,有兴趣的同学可以整合下服务器再测试下这两种数据源。dbcp也是一种开源的数据源,不过性能上并没有c3p0那样好,所以我们一般推荐使用c3p0。我们通常说的连接池是包含在数据源中,数据源通常包含连接池和连接池管理。
下面根据eg测试下这两种数据源单独在应用程序中的具体使用。 在文章的最后,我们附上这两种数据源的jar文件。
1.c3p0
工具类:
import java.beans.PropertyVetoException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JdbcC3p0 {
public static ComboPooledDataSource getDataSource() {
ComboPooledDataSource ds = new ComboPooledDataSource();
try {
ds.setDriverClass("com.mysql.jdbc.Driver"); //加载驱动
ds.setJdbcUrl("jdbc:mysql://localhost:3306/test");
//数据库连接的url
ds.setUser("root");
//用户名
ds.setPassword("root");
//密码
ds.setMaxPoolSize(20);//最大连接数
ds.setMinPoolSize(5);
//最小
ds.setInitialPoolSize(10);
//初始连接数
ds.setMaxStatements(200);
//可缓存的最大statement对象
} catch (PropertyVetoException e) {
e.printStackTrace();
}
return ds;
}
}
2 .dbcp数据源
工具类:
测试主类:
}
2 .dbcp数据源
工具类:
import java.sql.SQLException;
import org.apache.commons.dbcp.BasicDataSource;
public class JdbcPool {
public static BasicDataSource getDataSource() throws SQLException {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver"); //加载驱动
ds.setUrl("jdbc:mysql://localhost:3306/test"); //数据库连接的url
ds.setUsername("root"); //数据库用户名
ds.setPassword("root"); //数据库用户的密码
ds.setInitialSize(5); //初始连接数
ds.setMaxActive(20); //最大连接数
ds.setMinIdle(2); //空闲连接数
return ds;
}
}
测试主类:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Test {
public static void main(String[] args) throws Exception {
Connection conn = JdbcC3p0.getDataSource().getConnection(); //使用c3p0连接池
//Connection conn =JdbcPool.getDataSource().getConnection(); //使用dbcp连接池
String sql = "select * from person";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
System.out.println(rs.getInt(1)+","+rs.getString(2));
}
conn.close(); //归还连接池
}