美文网首页
java_数据库连接池

java_数据库连接池

作者: 走停2015_iOS开发 | 来源:发表于2021-02-08 11:03 被阅读0次
    JDBC开发流程
    • 加载驱动
    • 建立数据库连接(connect)
    • 执行SQL语句(statement)
    • ResultSet接受结果集(查询)
    • 断开连接 释放资源

    1.数据库连接对象是通过DriverManager来获取的,每次获取都需要向数据库申请获取连接,验证用户名和密码,执行完SQL语句后断开连接,这样的方式会造成资源的浪费,数据连接资源没有得到很好的重复利用。
    可以使用数据库连接池解决这一问题
    2.数据库连接池的基本思想就是为数据库建立一个缓冲池,预先向缓冲池放入一定数量的连接对象,供下一次请求的使用,做到了资源的重复利用,允许程序重复使用一个现有的数据库连接对象,而不需要重新创建

    数据库连接池实现

    JDBC的数据库连接池使用javax.sql.Datasource来完成的。
    javax表示java后来扩展的一部分内容
    javax.sql.Datasource 是java官方提供的接口,使用的时候开发者不需要自己来实现该接口,可以使用第三方的工具,C3P0是一个常用的第三方实现 C3P0下载地址

    1. 导入jar包{mchange-commons-java-0.2.19.jar,c3p0-0.9.5.5.jar}
    2. 编写代码
    3. 可以将C3P0的配置信息定义在xml文件中,java程序只需要加载配置文件即可完成数据库连接池的初始化操作
    4. &转义:&
            //创建c3p0
            try {
                String url = "jdbc:mysql://localhost:3306/bjpowernode";
                String user = "root";
                String pwd = "12345678";
                ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
                comboPooledDataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
                comboPooledDataSource.setJdbcUrl(url);
                comboPooledDataSource.setUser(user);
                comboPooledDataSource.setPassword(pwd);
    //            设置初始化连接数量
                comboPooledDataSource.setInitialPoolSize(20);
    //            设置最大连接数量
                comboPooledDataSource.setMaxPoolSize(40);
    //            当连接对象不够时,再次申请的连接个数
                comboPooledDataSource.setAcquireIncrement(5);
    //            当连接对象剩余2个时候就会去申请
                comboPooledDataSource.setMinPoolSize(2);
                Connection connection = comboPooledDataSource.getConnection();
                System.out.println(connection);
            } catch (PropertyVetoException | SQLException e) {
                e.printStackTrace();
            } 
    

    xml配置文件

    • 配置文件的名字必须是c3p0-config.xml
    • 初始化comboPooledDataSource时 传入的参数必须是c3p0-config.xmlnamed-config标签的name
    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
        <default-config>
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="jdbcUrl">
                jdbc:mysql://localhost:3306/blog?useSSL=false&amp;serverTimezone=UTC
            </property>
            <property name="user">root</property>
            <property name="password">toor</property>
            <property name="initialPoolSize">10</property>
            <property name="maxPoolSize">100</property>
            <property name="minPoolSize">60</property>
            <property name="maxStatements">200</property>
        </default-config>
        <named-config name="mysql5">
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/w_blog</property>
            <property name="user">root</property>
            <property name="password"></property>
            <property name="initialPoolSize">30</property>
            <property name="maxPoolSize">60</property>
        </named-config>
        <named-config name="mysql8">
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/w_blog?useSSL=false&amp;serverTimezone=UTC</property>
            <!-- 使用&amp;代替& -->
            <property name="user">root</property>
            <property name="password">toor</property>
            <property name="initialPoolSize">300</property>
            <property name="maxPoolSize">400</property>
        </named-config>
    </c3p0-config>
    

    DBUtils工具

    DBUtils:可以帮助开发者完成数据的封装,把结果集映射到java对象

    DBUtils中的类
    1.导入jar包 下载地址
    2.使用
    下面用到可变参数 Object... params
        public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException {
            return this.query(conn, false, sql, rsh, params);
        }
    
        public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh) throws SQLException {
            return this.query(conn, false, sql, rsh, (Object[])null);
        }
    
    
    ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql_name");
    QueryRunner run = new QueryRunner(dataSource);
    // Use the BeanHandler implementation to convert the first
    // ResultSet row into a Person JavaBean.
    ResultSetHandler<Person> h = new BeanHandler<Person>(Person.class);
    // Execute the SQL statement with one replacement parameter and
    // return the results in a new Person object generated by the BeanHandler.
    Person p = run.query(
        "SELECT * FROM Person WHERE name=?", h, "John Doe"); 
    

    相关文章

      网友评论

          本文标题:java_数据库连接池

          本文链接:https://www.haomeiwen.com/subject/bwuxxltx.html