JDBC_MySQL纯手工连接池的创建

来源:互联网 发布:电脑网络驱动下载 编辑:程序博客网 时间:2024/04/29 03:10

在连接数据库的过程中,我们需要建立连接,如果多个用户访问同一个数据库,那么就需要建立多个连接,但是如果每次连接数据库的时候都需要建立新的连接就太浪费资源了,这时候就提出了连接池的概念也就是数据源,连接池就是装有多个连接的容器,用户需要连接数据库的时候就直接从连接池中取,使用结束后再归还,这样就达到了循环利用的作用,大大减少了系统资源的占用。当然,Apache公司(dbcp)和来源社区(c3p0)都向我们提供了第三方架包,使用起来方便快捷,后边的文章我会向大家介绍,这里就是我手工敲的连接池,就是想让大家了解下数据池的创建原理:

1、我们需要用一个LinkedList集合作为连接池的容器,其实连接池就是指的这个LinkedList集合。我们都知道,LinkedList的线程是不安全的,所以这里我么用到了Collections.synchronizedList来保证其线程的安全

public class MyConnectionPool {private static List<Connection> pool = Collections.synchronizedList(new LinkedList<Connection>());
2、创建10个连接放入到连接池中,特别说明一点:DBTools_02.getConnection(),这个DBTools是我上篇文章封装的JDBC工具类,getConnection()为其中获取数据库连接的的方法。向连接池中添加连接的时候,我们每一次都添加到它的尾部,添加完成后,连接池也就初始化完成了

static {for(int i =0;i<10;i++){try {Connection con = DBTools_02.getConnection();pool.add(pool.size(), con);} catch (Exception e) {// TODO Auto-generated catch blockthrow new ExceptionInInitializerError("数据库连接池初始化错误。");}}}
3、有了连接池,下边就该是从池中获取连接的方法了,如果池中还有剩余连接,那么就从下标为0的位置取走,然后删除0位置,如果没有连接,那么就抛出异常,服务器繁忙

//从连接池中获取连接的方法public Connection getConnection (){Connection con = null;if(pool.size()>0){con = pool.get(0);pool.remove(0);System.out.println("取走1个现在剩余:"+pool.size());return con;}else{throw new RuntimeException("服务器繁忙,请稍后再试。");}}
4、归还连接,这样才能保证连接池的循环使用,使用完连接之后,调用该方法,那么便会向LinkedList数组的尾部添加该连接,也就达到了归还的作用,不需要再调用close()方法了,如果关闭了连接而不是归还,那么连接池就会被取空
//归还连接连到接池的方法public Connection backConnection(Connection con){pool.add(pool.size(), con);System.out.println("还回来一个,现在还剩余:"+pool.size());return null;}}