一种连接池的实现方案

来源:互联网 发布:刀剑乱舞短刀极化数据 编辑:IT博客网 时间:2018/11/16 13:01

DB.java


package wkx.db;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class DB {public static int executeUpdate(String sql) {int ans = 0;Connection conn = DB.getConn();Statement stmt = DB.getStmt(conn);try {ans = stmt.executeUpdate(sql);} catch (SQLException e) {e.printStackTrace();}finally{DB.close(stmt);DB.close(conn);}return ans;}public static Connection getConn() {return ConnPool.getConn();}public static Statement getStmt(Connection conn) {Statement stmt = null;try {stmt = conn.createStatement();} catch (SQLException e) {e.printStackTrace();}return stmt;}public static ResultSet executeQuery(Statement stmt, String sql) {//System.out.println("QUERY:"+sql);ResultSet rs = null;try {rs = stmt.executeQuery(sql);} catch (SQLException e) {e.printStackTrace();}return rs;}public static void close(Connection conn) {ConnPool.close(conn);}public static void close(Statement stmt) {try {if (stmt != null) {stmt.close();}} catch (SQLException e) {e.printStackTrace();}stmt = null;}public static void close(ResultSet rs) {try {if (rs != null) {rs.close();}} catch (SQLException e) {e.printStackTrace();}rs = null;}public static void closeAll(Connection conn,Statement stmt){DB.close(conn);DB.close(stmt);}public static void closeAll(Connection conn,Statement stmt,ResultSet rs){DB.close(conn);DB.close(stmt);DB.close(rs);}}


ConnPool.java


package wkx.db;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.LinkedList;public class ConnPool {public static final int MAX_CONN_NUM = 10;private static LinkedList<Connection> conns = null;private static int connNum = 0;static {conns = new LinkedList<Connection>();}private ConnPool(){}public static Connection getConn() {Connection conn = null;if(conns.size()==0){try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/project", "root", "root");} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}connNum++;}else{conn=conns.pop();}/** *  */ConnPool.printStatus();return conn;}public static void close(Connection conn) {if(connNum>ConnPool.MAX_CONN_NUM){try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}conn = null;connNum--;}else{conns.push(conn);}ConnPool.printStatus();}public static void printStatus(){System.out.println("闲置连接数:"+conns.size()+"  总连接数:"+connNum+"  已使用连接数:"+(connNum-conns.size()));}}