1.数据连接池概念
目的:数据库连接池的目的,为了减少频繁开关链接的时间,提高整个系统的响应能力
应具备的属性值:
- 初始大小
- 每次扩容大小
- 连接池最大个数
- 空闲连接的死亡时间
2.常见的数据库连接池:
- DBCP
- C3P0
- Druid
- hikariCP
DBCP练习
public class DBCPTest {
public static void main(String[] args) {
//数据库的连接池资源,在之后操作的时候只需要从池中获取即可
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/demo");
dataSource.setUsername("root");
dataSource.setPassword("123456");
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = dataSource.getConnection();
String sql = "select * from emp";
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
System.out.println(resultSet.getString("ename"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
C3P0练习
public class C3P0Test {
public static Connection connection;
public static ComboPooledDataSource dataSource;
public static void getConnection(){
dataSource = new ComboPooledDataSource();
}
public static void queryData(){
try {
connection = dataSource.getConnection();
String sql = "select * from emp";
PreparedStatement ps = connection.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()){
System.out.println(rs.getString("ename"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public class C3p0Test2 {
public static void main(String[] args) throws SQLException {
DataSource ds_unpooled = DataSources.unpooledDataSource("jdbc:mysql://localhost:3306/demo",
"root",
"123456");
// DataSource ds_pooled = DataSources.pooledDataSource( ds_unpooled );
Map overrides = new HashMap();
overrides.put("maxStatements", "200"); //Stringified property values work
overrides.put("maxPoolSize", new Integer(50)); //"boxed primitives" also work
DataSource ds_pooled = DataSources.pooledDataSource( ds_unpooled ,overrides);
Connection connection = ds_pooled.getConnection();
System.out.println(connection);
connection.close();
}
}
public class C3p0Test3 {
public static void main(String[] args) throws Exception {
// fetch a JNDI-bound DataSource
InitialContext ictx = new InitialContext();
DataSource ds = (DataSource) ictx.lookup( "java:comp/env/jdbc/myDataSource" );
// make sure it's a c3p0 PooledDataSource
if ( ds instanceof PooledDataSource)
{
PooledDataSource pds = (PooledDataSource) ds;
System.err.println("num_connections: " + pds.getNumConnectionsDefaultUser());
System.err.println("num_busy_connections: " + pds.getNumBusyConnectionsDefaultUser());
System.err.println("num_idle_connections: " + pds.getNumIdleConnectionsDefaultUser());
System.err.println();
}
else
System.err.println("Not a c3p0 PooledDataSource!");
}
}
druid练习
public class DruidTest {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
FileInputStream fileInputStream = new FileInputStream("src/pool/druid/druid.properties");
properties.load(fileInputStream);
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
}
HikariCP练习
public class HikariCPTest {
public static void main(String[] args) throws SQLException {
// HikariConfig config = new HikariConfig();
// config.setJdbcUrl("jdbc:mysql://localhost:3306/demo");
// config.setUsername("root");
// config.setPassword("123456");
//
// HikariDataSource ds = new HikariDataSource(config);
// Connection connection = ds.getConnection();
// System.out.println(connection);
// connection.close();
// HikariDataSource hikariDataSource = new HikariDataSource();
// hikariDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/demo");
// hikariDataSource.setUsername("root");
// hikariDataSource.setPassword("123456");
HikariConfig config = new HikariConfig("src/pool/hikariCP/hikariCP.properties");
HikariDataSource dataSource = new HikariDataSource(config);
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
}