自定义连接池DataSourse

自定义连接池DataSourse

连接池概述:

  管理数据库的连接,
作用:
  提高项目的性能.就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.所有的连接池必须实现一个接口 javax.sql.DataSource接口


获取连接方法:
  Connection getConnection()
归还连接的方法就是以前的释放资源的方法.调用connection.close();

常用连接池:
DBCP、C3P0

自定义连接池:

  1.创建一个DataSourse项目

  2.新建一个包,com.dbcp.hjh;包下新建一个java类DataSourseTest.java

  3.创建一个工具包com.util.hjh,放工具类JDBCUtil.java

  4.导入jar包mysql-connection-java-5.1.47.jar;记得导入后bulidPath以下

 

工具类JDBCUtil.java代码:

package com.util.hjh;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtil {
    final static String driver = "com.mysql.jdbc.Driver";
    final static String url = "jdbc:mysql://localhost/hejh?useUnicode=true&characterEncoding=UTF-8";
    final static String user  = "root";
    final static String password = "root";
    
    Connection conn = null;
    PreparedStatement ps = null;
    Statement st = null;
    ResultSet rs = null;
        
    /**获取连接*/
    public static Connection getConnection() throws SQLException  {
        Connection    conn = null;
        try {
            //注册驱动
            Class.forName(driver);
            //获取连接
            conn = DriverManager.getConnection(url, user, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }                    
        return conn;    
    }
    
    /**关闭资源closeResourse(conn,st)*/
    public static void closeResourse(Connection conn,Statement st) {
        try {
            if(st!=null) {
                st.close();
            }else {
                st = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(conn!=null) {
                conn.close();
            }else {
                conn = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    /**关闭资源closeResourse(conn,ps)*/
    public static void closeResourse(Connection conn,PreparedStatement ps) {
        try {
            if(ps!=null) {
                ps.close();
            }else {
                ps = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(conn!=null) {
                conn.close();
            }else {
                conn = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    /**关闭资源closeResourse(rs)*/
    public static void closeResourse(ResultSet rs) {
        try {
            if(rs!=null) {
                rs.close();
            }else {
                rs = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            
        }
    }
}

 

DataSourseTest.java代码:

package com.dbcp.hjh;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.LinkedList;
import com.util.hjh.JDBCUtil;

//自定义连接池
public class DataSourseTest {

    static LinkedList<Connection> pool = new LinkedList<>();//定义一个连接池
    //初始化时,放入三个连接
    static {
        for(int i=0;i<3;i++) {
            try {
                Connection conn = JDBCUtil.getConnection();
                pool.add(conn);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
    //从连接池中获取连接
    public static Connection getConnection() {
        //获取连接之前需判断是否为空
        if(pool.isEmpty()) {
            //如果连接池为空,新建2个连接
            for(int i=0;i<2;i++) {
                try {
                    Connection conn = JDBCUtil.getConnection();
                    pool.add(conn);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return pool.removeFirst();
    }
    
    //归还连接
    public static void backConn(Connection conn) {
        //将conn放入到list的最后面即可
        pool.addLast(conn);
        System.out.println("归还连接啦");
    }
    
    public static void main(String[] args) {
        //创建连接池
        DataSourseTest ds = new DataSourseTest();
        //获取连接
        Connection conn = ds.getConnection();
        System.out.println("即将获取一个连接:");
        System.out.println(conn);
        //归还连接,不做其他操作
        ds.backConn(conn);
    }
}

 

 eclipse中console输出:

即将获取一个连接:
com.mysql.jdbc.JDBC4Connection@8de145
归还连接啦
posted @ 2019-05-15 10:14  雪顶儿  阅读(228)  评论(0编辑  收藏  举报