数据库连接池

连接池的意义

  • 作用:连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。
  • 连接池放了N个Connection对象,本质上放在内存当中,在内存中划出一块缓存对象,应用程序每次从池里获得Connection对象,而不是直接从数据里获得,这样不占用服务器的内存资源。

两种优秀的连接池技术

  • 都要实现接口DataSource接口
  • C3P0
  • DPCP

jar包

DPCP

  • commons-dbcp-1.4.jar
  • commons-pool-1.5.6.jar

C3P0

  • c3p0-0.9.1.2.jar

DPCP

//硬编码的方式实现
@Test
public void testDPCP() throws SQLException {
    //获取DPCP核心类
    BasicDataSource dataSource = new BasicDataSource();
    //设置连接池
    dataSource.setInitialSize(3);   //初始化连接数
    dataSource.setMaxActive(6);     //最大连接数
    dataSource.setMaxIdle(300);     //最大空闲时间
    //设置连接的参数  连接字段,驱动,连接用户,密码
      String basename="root";
      String password ="root";
      String url = "jdbc:mysql:///JavaWeb?useUnicode=true&characterEncoding=utf8";

    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl(url);
    dataSource.setUsername(basename);
    dataSource.setPassword(password);
    //获取连接
    Connection conn = dataSource.getConnection();
    conn.prepareStatement("delete from admin where id = 3").executeUpdate();
    //关闭流
    conn.close();

}

//加载配置文件创建
@Test
public void testDPCP2() throws Exception {
    Properties prop = new Properties();
    //加载文件输入流
   InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("db.properties");
   //加载配置文件
    prop.load(inputStream);
    //创建DataSource
    DataSource dataSource = BasicDataSourceFactory.createDataSource(prop);

    //创建连接
    Connection conn = dataSource.getConnection();
    conn.prepareStatement("update  admin set userName='tom' where id = 6").executeUpdate();

    //关闭流
    conn.close();
}

C3P0

//加载配置文件
@Test
public void C3P0Xml() throws SQLException {
    //加载核心工具类
    ComboPooledDataSource dataSource = new ComboPooledDataSource("myApp");
    //创建连接
    Connection conn = dataSource.getConnection();
    PreparedStatement pstmt=null;
    for(int i=1;i<11;i++){
        String sql = "insert into admin(userName,pwd) values (?,?)";
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1,"jack"+i);
        pstmt.setString(2,"jack006");
        pstmt.executeUpdate();
    }
    //关闭流
    pstmt.close();
    conn.close();
}
c3p0的配置文件

你可能感兴趣的:(数据库连接池)