美文网首页
连接池(DBCP、C3P0)

连接池(DBCP、C3P0)

作者: 所以然WZY | 来源:发表于2018-12-27 20:58 被阅读0次

●实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池。
●概念
用池来管理Connection,这样可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。
●规范
Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池。就好比安卓的充电器接口,统一规范,统一使用。
常见的连接池:DBCP、C3P0。
●不用JDBC查询数据
将c3p0-config.xml粘贴到resources目录下——改掉jdbcUrl中的地址,把最后一项的表名换成你自己的表名——将DatasourceUtils导入JdbcUtil所在的包下——在pom.xml包下导入c3p0 jar包(一定要点击右下角的import changes),具体如下:
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
1:不用jdbcutil获取数据,代码如下:

public class dbQuery {
    public static void main(String[] args) throws SQLException {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
        String sql="select * from stu where age>?";
        Object [] parms={30};
        //List<Object[]> list = qr.query(connection, sql, new ArrayListHandler(), parms);
        List<Student> list = qr.query(sql, new BeanListHandler<Student>(Student.class),parms);
        System.out.println(list);

    }
}

运行查找结果如下图所示:

[Student{id=1, name='王博聪', age=90, sex='女', tname='null'}, Student{id=2, name='王博聪', age=111, sex='男', tname='null'}, Student{id=4, name='ewdwe', age=66, sex='女', tname='null'}, Student{id=5, name='ewdw', age=77, sex='女', tname='null'}, Student{id=9, name='一湖光塔影', age=33, sex='男', tname='null'}, Student{id=12, name='王芝洋', age=100, sex='女', tname='null'}]

2:写一个连接池:
连接池是用来维护数据库的链接,可以拿取连接,同时还可以归还连接。

package com.pp.util;

import java.sql.Connection;
import java.util.LinkedList;

public class MyDataSouce {
   static LinkedList<Connection> pool=new LinkedList<Connection>();//chi
   static {
       for (int i=0;i<3;i++){
           Connection connection = JdbcUtil.getConnection();
           pool.addLast(connection);
       }

   }
   public  static Connection getConnection(){
       if (pool.isEmpty()){
           for (int i=0;i<3;i++){
               Connection connection = JdbcUtil.getConnection();
               pool.add(connection);
           }
       }
       System.out.println("connection sucess");
       return pool.removeFirst();
   }

   public static  void addback(Connection connection){

       pool.add(connection);
       System.out.println("back");

   }

}

相关文章

网友评论

      本文标题:连接池(DBCP、C3P0)

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