From fca0a27781d8c214cb3fa2146c4bcb051b6a246f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=81=E4=B8=9A=E6=9E=97-17050417?= <17050417@suning-sports.com> Date: Wed, 28 Sep 2022 22:01:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BF=9E=E6=8E=A5=E6=B1=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JDBCDemo2/src/com/msb/dao/BaseDao.java | 35 +-------- .../src/com/msb/dao/MyConnectionPool.java | 77 +++++++++++++++++++ 2 files changed, 81 insertions(+), 31 deletions(-) create mode 100644 testJDBC/JDBCDemo2/src/com/msb/dao/MyConnectionPool.java diff --git a/testJDBC/JDBCDemo2/src/com/msb/dao/BaseDao.java b/testJDBC/JDBCDemo2/src/com/msb/dao/BaseDao.java index 50d59a8..b179857 100644 --- a/testJDBC/JDBCDemo2/src/com/msb/dao/BaseDao.java +++ b/testJDBC/JDBCDemo2/src/com/msb/dao/BaseDao.java @@ -6,20 +6,12 @@ import java.util.ArrayList; import java.util.List; public abstract class BaseDao { - public static String driver = "com.mysql.cj.jdbc.Driver"; - public static String url = "jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"; - public static String user = "root"; - public static String password = "Fnst1234"; - public List baseQuery(Class clazz, String sql, Object ... args) { Connection connection = null; - List list = new ArrayList(); PreparedStatement statement = null; try { - Class.forName(driver); - - connection = DriverManager.getConnection(url, user, password); + connection = MyConnectionPool.getConnection(); statement = connection.prepareStatement(sql); for (int i = 0; i < args.length; i++) { @@ -46,15 +38,7 @@ public abstract class BaseDao { } catch (SQLException e) { e.printStackTrace(); } - - try { - if (connection != null) { - connection.close(); - } - } - catch (SQLException e) { - e.printStackTrace(); - } + MyConnectionPool.returnConnection(connection); } return list; } @@ -65,11 +49,8 @@ public abstract class BaseDao { int rows=0; try{ - // 选择数据库 - Class.forName(driver); - // 建立连接 - connection = DriverManager.getConnection(url, user, password); + connection = MyConnectionPool.getConnection(); preparedStatement = connection.prepareStatement(sql); //设置参数 @@ -89,15 +70,7 @@ public abstract class BaseDao { e.printStackTrace(); } } - - try { - if (connection != null) { - connection.close(); - } - } - catch (SQLException e) { - e.printStackTrace(); - } + MyConnectionPool.returnConnection(connection); } return rows; } diff --git a/testJDBC/JDBCDemo2/src/com/msb/dao/MyConnectionPool.java b/testJDBC/JDBCDemo2/src/com/msb/dao/MyConnectionPool.java new file mode 100644 index 0000000..a1b0588 --- /dev/null +++ b/testJDBC/JDBCDemo2/src/com/msb/dao/MyConnectionPool.java @@ -0,0 +1,77 @@ +package com.msb.dao; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.LinkedList; +import java.util.List; + +public class MyConnectionPool { + + private static String driver = "com.mysql.cj.jdbc.Driver"; + private static String url = "jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"; + private static String user = "root"; + private static String password = "Fnst1234"; + + private static int initSize = 5; + + private static int maxSize = 10; + + private static LinkedList pool = new LinkedList(); + + static { + try { + Class.forName(driver); + + for (int i = 0; i < initSize; i++) { + Connection connection = initConnection(); + if (connection != null) { + pool.add(connection); + } + } + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + + private static Connection initConnection() { + try { + return DriverManager.getConnection(url, user, password); + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + public static Connection getConnection() { + Connection connection =null; + if (pool.size() > 0) { + connection = pool.removeFirst(); + } + else { + connection = initConnection(); + } + return connection; + } + + public static void returnConnection(Connection connection) { + if (connection == null) { + return; + } + try { + if (connection.isClosed()) { + return; + } + if (pool.size() < maxSize) { + connection.setAutoCommit(true); + pool.addLast(connection); + } + else { + connection.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + +}