zoukankan      html  css  js  c++  java
  • 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的区别:前者没有自动回收空闲连接的功能,后者有自动回收空闲连接的功能

  • 相关阅读:
    利用css实现鼠标经过元素,下划线由中间向两边展开
    盒模型的auto值
    CSS选择器
    CSS类名命名规则
    leetcode 移除元素
    leetcode 有效的括号
    leetcode 罗马数字转整数
    leetcode 回文数
    leetcode 合并两个有序数组
    leetcode 最长公共前缀
  • 原文地址:https://www.cnblogs.com/rosehuang/p/7305754.html
Copyright © 2011-2022 走看看