From 808f7ad4582ae7ab3e1dfc5f334bf88b6b1f0d8f Mon Sep 17 00:00:00 2001 From: stylefeng Date: Sun, 4 May 2025 17:44:39 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=908.3.4=E3=80=91=E3=80=90db=E3=80=91?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE=E5=BA=93=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kernel/db/api/util/DbNameReplaceUtil.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/DbNameReplaceUtil.java diff --git a/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/DbNameReplaceUtil.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/DbNameReplaceUtil.java new file mode 100644 index 000000000..8f4a15470 --- /dev/null +++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/DbNameReplaceUtil.java @@ -0,0 +1,66 @@ +package cn.stylefeng.roses.kernel.db.api.util; + +import cn.hutool.core.util.StrUtil; +import cn.stylefeng.roses.kernel.rule.enums.DbTypeEnum; +import cn.stylefeng.roses.kernel.rule.util.DatabaseTypeUtil; + +/** + * 数据库名称替换工具,替换url中的数据库名称 + * + * @author fengshuonan + * @since 2025/1/16 16:21 + */ +public class DbNameReplaceUtil { + + /** + * 替换URL中的数据库名称 + * + * @param databaseUrl 数据源URL + * @param databaseName 需要替换成的数据库名称 + * @return 替换后的数据源URL + * @author fengshuonan + * @since 2025/5/4 17:44 + */ + public static String replaceDatabaseName(String databaseUrl, String databaseName) { + + if (StrUtil.isBlank(databaseName)) { + return databaseUrl; + } + + // 如果是mysql + if (DbTypeEnum.MYSQL.equals(DatabaseTypeUtil.getDbType(databaseUrl))) { + // 获取url中最后一个“/”的位置 + int firstPosition = databaseUrl.lastIndexOf("/"); + + // 获取url中“?”的位置 + int lastPosition = databaseUrl.lastIndexOf("?"); + + // 将传入的数据库名称替换url中的数据库名称 + StringBuilder sbu = new StringBuilder(databaseUrl); + sbu.replace(firstPosition + 1, lastPosition, databaseName); + return sbu.toString(); + } + + // 如果是postgreSQL + else if (DbTypeEnum.PG_SQL.equals(DatabaseTypeUtil.getDbType(databaseUrl))) { + // 获取url中最后一个“/”的位置 + int firstPosition = databaseUrl.lastIndexOf("/"); + return databaseUrl.substring(0, firstPosition + 1) + databaseName; + } + + // 如果是SQL SERVER + else if (DbTypeEnum.MS_SQL.equals(DatabaseTypeUtil.getDbType(databaseUrl))) { + // 获取url中最后一个“=”的位置 + int firstPosition = databaseUrl.lastIndexOf("="); + return databaseUrl.substring(0, firstPosition + 1) + databaseName; + } + + // 如果是Oracle,不做处理 + else if (DbTypeEnum.ORACLE.equals(DatabaseTypeUtil.getDbType(databaseUrl))) { + return databaseUrl; + } + + return databaseUrl; + } + +}