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的分别:前者没有电动回收空闲连接的效用,后者来活动回收空闲连接的作用

相关文章