数据库连接池

来源:互联网 发布:苹果软件 编辑:程序博客网 时间:2024/05/18 23:57

数据库连接池

JDBC连接是连接数据库常用的方式,但是连接只有当需要的时候才创建,因此每次创建连接都需要耗费比较多的时间,会导致效率低下
数据库连接池的原理是在一个连接池中创建多条连接,当需要时就把连接拿出来使用,等到使用结束之后又把这条连接返回到线程池,这样就实现了资源的重新利用,并且不用等到需要的时候才去创建连接,提高了效率

连接池主要有两种数据源

  • DBCP数据源
  • C3P0数据源
    注释:
  • 数据源和数据库连接不同,数据源无需创建多个,它是产生数据库连接的工厂(工厂设计模式),因此整个应用只需要一个数据源即可
  • 只需创建一个数据源,体现了单例设计模式的思想

C3P0数据源

C3P0连接池的优点:不仅可以自动清理不再使用的Connection,还可以自动清理Statement和ResultSet

使用C3P0连接池的步骤:

  • 下载C3P0-0.9.1.2.jar 包,将它导入到所在的工程当中 ,注意要放在src目录下
    这里写图片描述

  • 其次要搭配好关于自己数据库的一些信息

    public final class connectPool{        private static connectPool instance ;        private static ComboPooledDataSource dataSource;        //把构造方法设为私有不可见        private connectPool(){            dataSource = new ComboPooledDataSource();            dataSource.setUser("root");  //设置用户名              dataSource.setPassword("xxxx");  //设置密码              dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/qg");//设置连接的url            dataSource.setDriverClass("com.mysql.jdbc.Driver");            dataSource.setMinPoolSize(1);//设置最小连接数为1            dataSource.setMaxPoolSize(50);//设置最大连接数为50             dataSource.setMaxStatement(50);  //设置最长等待时间          }    }    //确保只是建立一个连接池,不会浪费资源    public static final connectPool getInstance(){        if(instance == null){            //加入连接池还没创建,则新建一个连接池            instance = new connectPool();            //内部的构造方法            }            return instance;        }    }    //建立连接      public sychrnoized final Connection getConnection(){        Connection conn = null;        conn = dataSource.getConnection();    }
  • 除此之外还可以通过配置xml文件来设置数据库的链接,就不需要最前面的代码
    特别注意
    <c3p0-config>    <!-- 注意这里的命名要和和之后建立连接的名称一致-->    <named-config name="mysql">        <property name ="driverClass">com.mysql.jdbc.Driver</property>          <!--具体到你要连接的表名-->        <<property name ="jdbcUril">jdbc:mysql://localhost:3306/qg</property>          <property name ="user">root</property>        <property name ="password">xxxxxx</property>        <property name ="initialPoolSize">10</property>        <property name ="maxIdleTime">30</property>        <property name ="minPoolSize">10</property>        <property name ="MaxPoolSize">100</property>        <property name ="maxStatements">150</property>    </named-config></c3p0-config>

之后再使用时要注明好链接的名称

    public static void main(String[] args){        ComboPooledDataSource ds = new ComboPooledDataSource("mysql");        //......    }

注释:连接池的增删查改和JDBC连接基本类似,通过select、update、delete和insert等关键字来进行。