自定义连接池DataSourse

时间:2022-09-19 23:48:56

自定义连接池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以下

自定义连接池DataSourse

 

工具类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
归还连接啦