数据库连接池的简单实现

数据库连接的步骤
加载驱动类,创建连接,创建sql语句,执行sql语句,关闭资源。
数据库连接池的实现原理:
先在池中创建一些连接(connection),等待线程需要的时候直接拿,缩短创建的时间,提高效应速度,使用完之后再放入池中,但并没有真正的关闭资源,等待下一次任务获取。

简单的实现>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

1).初始化连接池,以达到最小的连接数。
2).创建连接
3). 获取连接
4).关闭连接(如果池中的连接数超过连接池中的最大值,关闭连接,否则把链接放到池中)

package orm.pool;

import orm.core.DBManager;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Description: TODO
 * @Author: 13394
 * @CreateDate: 2018/11/25 12:31
 */
public class ConnectionPool {
    private List<Connection> list = null; //方法连接对象

    private static int POOL_MIN = DBManager.getConf().getPoolMin(); //存放最小连接数
    private static int POOL_MAX = DBManager.getConf().getPoolMax(); //存放最大连接数

    public ConnectionPool() {
        initPool();
    }

    /**
     * @return void
     * @Author zhangfu
     * @Description 初始化连接池,使池中的连接数达到最小值
     * @Date 12:34 2018/11/25
     * @Param []
     */
    public void initPool() {
        if (null == list) {
            list = new ArrayList<Connection>();
        }

        if (list.size() < ConnectionPool.POOL_MIN) {
            list.add(createConn()) ;
            System.out.println("初始化话连接数为:" + list.size());
        }

    }

    /**
     * @return java.sql.Connection
     * @Author zhangfu
     * @Description创建连接
     * @Date 12:38 2018/11/25
     * @Param []
     */
    public Connection createConn() {
        try {
            Class.forName(DBManager.getConf().getDriver());
            return DriverManager.getConnection(DBManager.getConf().getUrl(), DBManager.getConf().getUsername(), DBManager.getConf().getPassword());
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * @return java.sql.Connection
     * @Author zhangfu
     * @Description 从池中获得一个连接
     * @Date 12:43 2018/11/25
     * @Param []
     */
    public synchronized Connection getConn() {
        int last_index = list.size() - 1;
        Connection conn = list.get(last_index);
        list.remove(last_index);
        return conn;
    }

    /**
     * @return void
     * @Author zhangfu
     * @Description 把连接放回到池中
     * @Date 12:46 2018/11/25
     * @Param []
     */
    public void close(Connection conn) {
        if (list.size() > ConnectionPool.POOL_MAX) {
            if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
            }
        } else {


            list.add(conn);
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值