From f30f3ac37bac4d170e1fe6d87fdf57adb3b783d3 Mon Sep 17 00:00:00 2001 From: konbai <1527468660@qq.com> Date: 星期五, 18 三月 2022 01:37:04 +0800 Subject: [PATCH] fix 修复执行"查询当前数据库类型"后未关闭数据库链接,导致当前连接池中活跃连接数达到最大连接数的bug --- ruoyi-common/src/main/java/com/ruoyi/common/helper/DataBaseHelper.java | 30 ++++++++++++++++++++---------- 1 files changed, 20 insertions(+), 10 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataBaseHelper.java b/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataBaseHelper.java index 3d98def..34afa5b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataBaseHelper.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataBaseHelper.java @@ -9,6 +9,7 @@ import lombok.NoArgsConstructor; import javax.sql.DataSource; +import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; @@ -23,11 +24,11 @@ /** * 鑾峰彇褰撳墠鏁版嵁搴撶被鍨� */ - public static DataBaseType getDataBasyType() { + public static DataBaseType getDataBaseType() { DynamicRoutingDataSource ds = (DynamicRoutingDataSource) SpringUtils.getBean(DataSource.class); DataSource dataSource = ds.determineDataSource(); - try { - DatabaseMetaData metaData = dataSource.getConnection().getMetaData(); + try (Connection conn = dataSource.getConnection()) { + DatabaseMetaData metaData = conn.getMetaData(); String databaseProductName = metaData.getDatabaseProductName(); return DataBaseType.find(databaseProductName); } catch (SQLException e) { @@ -36,26 +37,35 @@ } public static boolean isMySql() { - return DataBaseType.MY_SQL == getDataBasyType(); + return DataBaseType.MY_SQL == getDataBaseType(); } public static boolean isOracle() { - return DataBaseType.ORACLE == getDataBasyType(); + return DataBaseType.ORACLE == getDataBaseType(); } public static boolean isPostgerSql() { - return DataBaseType.POSTGRE_SQL == getDataBasyType(); + return DataBaseType.POSTGRE_SQL == getDataBaseType(); } public static boolean isSqlServer() { - return DataBaseType.SQL_SERVER == getDataBasyType(); + return DataBaseType.SQL_SERVER == getDataBaseType(); } public static String findInSet(Object var1, String var2) { - DataBaseType dataBasyType = getDataBasyType(); + DataBaseType dataBasyType = getDataBaseType(); + String var = Convert.toStr(var1); if (dataBasyType == DataBaseType.SQL_SERVER) { - return "charindex(" + Convert.toStr(var1) + ", " + var2 + ") <> 0"; + // charindex(',100,' , ',0,100,101,') <> 0 + return "charindex('," + var + ",' , ','+" + var2 + "+',') <> 0"; + } else if (dataBasyType == DataBaseType.POSTGRE_SQL) { + // (select position(',100,' in ',0,100,101,')) <> 0 + return "(select position('," + var + ",' in ','||" + var2 + "||',')) <> 0"; + } else if (dataBasyType == DataBaseType.ORACLE) { + // instr(',0,100,101,' , ',100,') <> 0 + return "instr(','||" + var2 + "||',' , '," + var + ",') <> 0"; } - return "find_in_set(" + Convert.toStr(var1) + ", " + var2 + ") <> 0"; + // find_in_set(100 , '0,100,101') + return "find_in_set(" + var + " , " + var2 + ") <> 0"; } } -- Gitblit v1.9.3