day04----连接池

这段时间家里有事,然后自己也颓了一段时间,但是后面还是要陆陆续续的补起来,路还长,不能太早下结论。。。

数据库连接池的作用:一次性批量制造一些连接connection对象放入连接池中,即在系统初始化时,将数据库连接作为对象存储在内存中,要使用时就从池子里面取出一个连接使用,当用完不需要时,再把连接放入池子中;达到了复用连接,避免了不断的创建关闭连接,从而达到优化

数据库连接池和JDBC:数据库连接池是分配、管理、释放数据库连接,提高对数据库操作的性能;JDBC是一种用于执行sql语句的Java API,为多种关系数据库提供统一访问;

开源的数据库连接池技术

1、DBCP数据库连接池,Apache上的一个Java项目,Tomcat使用的连接池组件;使用dbcp需要两个架包:commons--dbcp.jar、commons-pool.jar

  //硬编码的方式实现连接池
    public void testDbcp() throws Exception{
        //dbcp连接池核心类
        BasicDataSource dataSource = new BasicDataSource();
        //连接池参数配置:连接字符串,驱动,用户,密码,初始化连接数,最大连接数,最大空闲时间
        dataSource.setUrl("jdbc:mysql:///jdbc_demo");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("1234");
        dataSource.setInitialSize(3);
        dataSource.setMaxActive(6);
        dataSource.setMaxIdle(3000);
        //获取连接
        Connection connection = dataSource.getConnection();
        connection.prepareStatement("delete from admin where id=2").executeUpdate();
        //关闭
        connection.close();
    }
    
    //配置方式实现,便于维护
    public void testProp() throws Exception{
        //加载配置文件
        Properties properties = new Properties();
        //获取文件流
        InputStream inputStream = DbcpTest.class.getResourceAsStream("db.properties");
        //加载属性配置文件
        properties.load(inputStream);
        //根据配置,直接创建数据源对象
        DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
        //获取连接
        Connection connection = dataSource.getConnection();
        connection.prepareStatement("delete from admin where id = 1").executeUpdate();
        connection.close();
    }
  db.properties文件   url
= jdbc:mysql:///jdbc_demo   driverClassName = com.mysql.jdbc.Driver   username = root   password = 1234   initialSize = 3   maxActive = 6   maxIdle = 3000

2、C3P0开源的JDBC连接池,实现了数据和JNDI 的绑定,目前使用它的开源项目有hibernate、spring

2.1、JNDI:Java命名和目录接口,主要作用在于:可以把java对象放在一个容器中(JNDI容器),并为容器中的Java对象去一个名称,以后程序想要获取Java对象,只需通过名称检索即可;其核心API为context,代表JNDI容器,lookup方法为检索对象中对应名称的对象

//硬编码的方式,使用c3p0连接池管理连接
    public void testC3P0() throws Exception{
        //创建连接池核心工具类
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //连接池参数配置:连接字符串,驱动,用户,密码,初始化连接数,最大连接数,最大空闲时间
        dataSource.setJdbcUrl("jdbc:mysql:///jdbc_demo");
        dataSource.setConnectionTesterClassName("com.mysql.jdbc.Driver");
        dataSource.setUser("root");
        dataSource.setPassword("1234");
        dataSource.setInitialPoolSize(3);
        dataSource.setMaxPoolSize(6);
        dataSource.setMaxIdleTime(3000);
        //获取连接对象
        Connection connection = dataSource.getConnection();
        connection.prepareStatement("delete from admin where id = 2").executeUpdate();
        connection.close();
    }

//配置文件方式
    public void TestPro() throws Exception{
        //创建c3p0连接池核心工具类
        //自动加载src下c3p0的配置文件
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        PreparedStatement ps = null;
        Connection connection = dataSource.getConnection();
        for (int i = 0; i < 11; i++)
        {
            String sql = "insert into admin (name,age) values(?,?)";
            ps = connection.prepareStatement(sql);
            ps.setString(1, "july"+i);
            ps.setInt(2, 10);
            ps.executeUpdate();
        }
        ps.close();
        connection.close();
    }

<!-- c3p0-config.xml -->
<c3p0-config>
    <default-config>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc_demo</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="initialPoolSize">3</property>
        <property name="maxPoolSize">6</property>
        <property name="maxIdleTime">1000</property>
    </default-config>
    
    <named-config name="oracle_config">
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc_demo</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="initialPoolSize">3</property>
        <property name="maxPoolSize">6</property>
        <property name="maxIdleTime">1000</property>
    </named-config>
</c3p0-config>

3、Proxool:Java数据库连接池技术,sourceforge下的一个开源项目,关键在于这个连接池提供监控的功能

4、DBCP和C3P0的区别:前者没有自动回收空闲连接的功能,后者有自动回收空闲连接的功能

原文地址:https://www.cnblogs.com/rosehuang/p/7305754.html