diff --git a/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/exception/enums/DatabaseExceptionEnum.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/exception/enums/DatabaseExceptionEnum.java new file mode 100644 index 000000000..604cf1567 --- /dev/null +++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/exception/enums/DatabaseExceptionEnum.java @@ -0,0 +1,79 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.db.api.exception.enums; + +import cn.stylefeng.roses.kernel.db.api.constants.DbConstants; +import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; +import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum; +import lombok.Getter; + +/** + * 不同数据库类型的枚举 + *
+ * 用于标识mapping.xml中不同数据库的标识
+ *
+ * @author fengshuonan
+ * @date 2020/6/20 21:08
+ */
+@Getter
+public enum DatabaseExceptionEnum implements AbstractExceptionEnum {
+
+ /**
+ * 创建数据库异常
+ */
+ CREATE_DATABASE_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + DbConstants.DB_EXCEPTION_STEP_CODE + "01", "创建数据库异常,具体信息:{}"),
+
+ /**
+ * 查询表的所有字段错误
+ */
+ FIELD_GET_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + DbConstants.DB_EXCEPTION_STEP_CODE + "02", "查询表的所有字段错误,具体信息:{}"),
+
+ /**
+ * 查询所有表错误
+ */
+ TABLE_LIST_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + DbConstants.DB_EXCEPTION_STEP_CODE + "03", "查询所有表错误,具体信息:{}"),
+
+ /**
+ * sql执行错误
+ */
+ SQL_EXEC_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + DbConstants.DB_EXCEPTION_STEP_CODE + "04", "sql执行错误,具体信息:{}");
+
+
+ /**
+ * 错误编码
+ */
+ private final String errorCode;
+
+ /**
+ * 提示用户信息
+ */
+ private final String userTip;
+
+ DatabaseExceptionEnum(String errorCode, String userTip) {
+ this.errorCode = errorCode;
+ this.userTip = userTip;
+ }
+
+}
diff --git a/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/pojo/db/DatabaseInfoDTO.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/pojo/db/DatabaseInfoDTO.java
new file mode 100644
index 000000000..81024fd72
--- /dev/null
+++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/pojo/db/DatabaseInfoDTO.java
@@ -0,0 +1,34 @@
+package cn.stylefeng.roses.kernel.db.api.pojo.db;
+
+import lombok.Data;
+
+/**
+ * 数据库信息的封装
+ *
+ * @author fengshuonan
+ * @date 2021/5/19 10:37
+ */
+@Data
+public class DatabaseInfoDTO {
+
+ /**
+ * jdbc的驱动类型
+ */
+ private String jdbcDriver;
+
+ /**
+ * jdbc的url
+ */
+ private String jdbcUrl;
+
+ /**
+ * 数据库连接的账号
+ */
+ private String username;
+
+ /**
+ * 数据库连接密码
+ */
+ private String password;
+
+}
diff --git a/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/pojo/db/TableFieldInfo.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/pojo/db/TableFieldInfo.java
new file mode 100644
index 000000000..e56d3d7de
--- /dev/null
+++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/pojo/db/TableFieldInfo.java
@@ -0,0 +1,29 @@
+package cn.stylefeng.roses.kernel.db.api.pojo.db;
+
+import lombok.Data;
+
+/**
+ * 字段详情
+ *
+ * @author fengshuonan
+ * @date 2020-01-19-5:40 下午
+ */
+@Data
+public class TableFieldInfo {
+
+ /**
+ * 字段名称(和数据库中的字段名称一致,可能为带下划线的)
+ */
+ private String columnName;
+
+ /**
+ * 驼峰命名法的名称
+ */
+ private String camelFieldName;
+
+ /**
+ * 字段注释
+ */
+ private String columnComment;
+
+}
diff --git a/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/pojo/db/TableInfo.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/pojo/db/TableInfo.java
new file mode 100644
index 000000000..90e8e5e2c
--- /dev/null
+++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/pojo/db/TableInfo.java
@@ -0,0 +1,24 @@
+package cn.stylefeng.roses.kernel.db.api.pojo.db;
+
+import lombok.Data;
+
+/**
+ * 表的基本信息
+ *
+ * @author fengshuonan
+ * @date 2021/5/19 10:47
+ */
+@Data
+public class TableInfo {
+
+ /**
+ * 表名称
+ */
+ private String tableName;
+
+ /**
+ * 表的注释
+ */
+ private String tableComment;
+
+}
diff --git a/kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/AbstractSql.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/AbstractSql.java
similarity index 95%
rename from kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/AbstractSql.java
rename to kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/AbstractSql.java
index 7eed4bd87..cffcf5c8d 100644
--- a/kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/AbstractSql.java
+++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/AbstractSql.java
@@ -22,12 +22,12 @@
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
* 6.若您的项目无法满足以上几点,可申请商业授权
*/
-package cn.stylefeng.roses.kernel.dsctn.persist.sqls;
+package cn.stylefeng.roses.kernel.db.api.sqladapter;
import cn.stylefeng.roses.kernel.db.api.enums.DbTypeEnum;
/**
- * 异构sql获取
+ * 异构sql获取基类,通过继承此类,编写使用不同数据库的sql
*
* @author fengshuonan
* @date 2020/10/31 23:44
diff --git a/kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/CreateDatabaseSql.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/database/CreateDatabaseSql.java
similarity index 91%
rename from kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/CreateDatabaseSql.java
rename to kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/database/CreateDatabaseSql.java
index 11b99e831..25ab22bf9 100644
--- a/kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/CreateDatabaseSql.java
+++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/database/CreateDatabaseSql.java
@@ -22,12 +22,13 @@
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
* 6.若您的项目无法满足以上几点,可申请商业授权
*/
-package cn.stylefeng.roses.kernel.dsctn.persist.sqls;
+package cn.stylefeng.roses.kernel.db.api.sqladapter.database;
+import cn.stylefeng.roses.kernel.db.api.sqladapter.AbstractSql;
import lombok.Getter;
/**
- * 创建数据库的sql
+ * 创建数据库的sql,可用在租户的创建
*
* @author fengshuonan
* @date 2019-07-16-13:06
diff --git a/kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/DropDatabaseSql.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/database/DropDatabaseSql.java
similarity index 90%
rename from kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/DropDatabaseSql.java
rename to kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/database/DropDatabaseSql.java
index beaf85821..eac83cf7b 100644
--- a/kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/DropDatabaseSql.java
+++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/database/DropDatabaseSql.java
@@ -22,12 +22,13 @@
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
* 6.若您的项目无法满足以上几点,可申请商业授权
*/
-package cn.stylefeng.roses.kernel.dsctn.persist.sqls;
+package cn.stylefeng.roses.kernel.db.api.sqladapter.database;
+import cn.stylefeng.roses.kernel.db.api.sqladapter.AbstractSql;
import lombok.Getter;
/**
- * 删除数据库的sql
+ * 数据库删除,可用在租户的删除
*
* @author fengshuonan
* @date 2020/9/4
@@ -54,4 +55,5 @@ public class DropDatabaseSql extends AbstractSql {
protected String oracle() {
return "DROP DATASPACE ?;";
}
+
}
diff --git a/kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/TableFieldListSql.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/table/TableFieldListSql.java
similarity index 95%
rename from kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/TableFieldListSql.java
rename to kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/table/TableFieldListSql.java
index 2c20cce41..0b18d22d1 100644
--- a/kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/TableFieldListSql.java
+++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/table/TableFieldListSql.java
@@ -22,8 +22,9 @@
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
* 6.若您的项目无法满足以上几点,可申请商业授权
*/
-package cn.stylefeng.roses.kernel.dsctn.persist.sqls;
+package cn.stylefeng.roses.kernel.db.api.sqladapter.table;
+import cn.stylefeng.roses.kernel.db.api.sqladapter.AbstractSql;
import lombok.Getter;
/**
@@ -70,4 +71,5 @@ public class TableFieldListSql extends AbstractSql {
protected String oracle() {
return "select column_name as columnName, comments as columnComment from user_col_comments where Table_Name= ?";
}
+
}
diff --git a/kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/TableListSql.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/table/TableListSql.java
similarity index 96%
rename from kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/TableListSql.java
rename to kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/table/TableListSql.java
index 65c258fcb..f39d7f698 100644
--- a/kernel-d-ds-container/ds-container-sdk/src/main/java/cn/stylefeng/roses/kernel/dsctn/persist/sqls/TableListSql.java
+++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/sqladapter/table/TableListSql.java
@@ -22,8 +22,9 @@
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
* 6.若您的项目无法满足以上几点,可申请商业授权
*/
-package cn.stylefeng.roses.kernel.dsctn.persist.sqls;
+package cn.stylefeng.roses.kernel.db.api.sqladapter.table;
+import cn.stylefeng.roses.kernel.db.api.sqladapter.AbstractSql;
import lombok.Getter;
/**
@@ -73,4 +74,5 @@ public class TableListSql extends AbstractSql {
"left join user_tab_comments co on ut.table_name = co.table_name\n" +
"where tablespace_name is not null and user= ?";
}
+
}
diff --git a/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/ClobUtil.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/ClobUtil.java
new file mode 100644
index 000000000..159e136ad
--- /dev/null
+++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/ClobUtil.java
@@ -0,0 +1,65 @@
+package cn.stylefeng.roses.kernel.db.api.util;
+
+import java.io.BufferedReader;
+import java.io.Reader;
+import java.sql.Clob;
+
+/**
+ * oracle数据库转化工具
+ *
+ * @author fengshuonan
+ * @date 2021/5/19 10:33
+ */
+public class ClobUtil {
+
+ /**
+ * Clob类型转换成String类型
+ *
+ * @author fengshuonan
+ * @date 2021/5/19 10:33
+ */
+ public static String clobToString(final Clob clob) {
+
+ if (clob == null) {
+ return null;
+ }
+
+ Reader reader = null;
+ try {
+ reader = clob.getCharacterStream();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (reader == null) {
+ return "";
+ }
+
+ BufferedReader br = new BufferedReader(reader);
+
+
+ String str = null;
+
+ // 读取第一行
+ try {
+ str = br.readLine();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ StringBuilder sb = new StringBuilder();
+
+ // 如果没有到达流的末尾,则继续读取下一行
+ while (str != null) {
+ sb.append(str);
+ try {
+ str = br.readLine();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ return sb.toString();
+ }
+
+}
diff --git a/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/DatabaseUtil.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/DatabaseUtil.java
new file mode 100644
index 000000000..46574a06a
--- /dev/null
+++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/DatabaseUtil.java
@@ -0,0 +1,178 @@
+package cn.stylefeng.roses.kernel.db.api.util;
+
+import cn.hutool.core.util.StrUtil;
+import cn.stylefeng.roses.kernel.db.api.exception.DaoException;
+import cn.stylefeng.roses.kernel.db.api.exception.enums.DatabaseExceptionEnum;
+import cn.stylefeng.roses.kernel.db.api.pojo.db.DatabaseInfoDTO;
+import cn.stylefeng.roses.kernel.db.api.pojo.db.TableFieldInfo;
+import cn.stylefeng.roses.kernel.db.api.pojo.db.TableInfo;
+import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
+import cn.stylefeng.roses.kernel.db.api.sqladapter.database.CreateDatabaseSql;
+import cn.stylefeng.roses.kernel.db.api.sqladapter.table.TableFieldListSql;
+import cn.stylefeng.roses.kernel.db.api.sqladapter.table.TableListSql;
+import lombok.extern.slf4j.Slf4j;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 数据库操作工具类,可用来获取一些元数据
+ *
+ * @author fengshuonan
+ * @date 2021/5/19 10:35
+ */
+@Slf4j
+public class DatabaseUtil {
+
+ /**
+ * 查询某个数据库连接的所有表
+ *
+ * @author fengshuonan
+ * @date 2021/5/19 10:35
+ */
+ public static List