自定义连接池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
归还连接啦