From 10aa851271f8a7e41b77f7cad3b8580582a55d9f Mon Sep 17 00:00:00 2001 From: GCC1566 <156654540@qq.com> Date: Sun, 27 Oct 2024 15:29:06 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=AE=80=E5=8C=96=E5=88=9D=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../conscript/action/InitDataBase.java | 39 +------------------ 1 file changed, 2 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/gcc/airbase/conscript/action/InitDataBase.java b/src/main/java/com/gcc/airbase/conscript/action/InitDataBase.java index 10ddbd3..04c1f3f 100644 --- a/src/main/java/com/gcc/airbase/conscript/action/InitDataBase.java +++ b/src/main/java/com/gcc/airbase/conscript/action/InitDataBase.java @@ -1,9 +1,7 @@ package com.gcc.airbase.conscript.action; import java.sql.Connection; -import java.sql.SQLDataException; import java.sql.SQLException; -import java.util.Map; /** * 初始化数据库机制 @@ -27,47 +25,14 @@ public interface InitDataBase { */ void startCoreJob() throws SQLException; - /** - * 测试数据库链接 - * @return boolean - */ - boolean testConnection(); + /** * 确认库是否存在 * @return boolean */ - boolean databaseIsExitd(Connection connection); + boolean databaseIsExist(Connection connection); - /** - * 创建数据库实例 - * @return Boolean - */ - boolean createDataBase(); - /** - * 获取当前数据库版本 - * @return - */ - Float getCurrenDbVersion(); - /** - * 执行sql内容 - * @param sqlcontent - * @return - * @throws SQLDataException - */ - boolean excuteSQL(Map sqlcontent) throws SQLException; - - /** - * 调整当前数据库版本号 - */ - void updateDbVersion(Object version) throws SQLException; - - - /** - * 关闭连接 - * @return - */ - void close() throws SQLException; } \ No newline at end of file -- Gitee From e22633d53744d2c6e20a2a43f34312125437976f Mon Sep 17 00:00:00 2001 From: GCC1566 <156654540@qq.com> Date: Sun, 27 Oct 2024 15:29:28 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=87=8D=E6=96=B0=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=9F=BA=E7=A1=80=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../action/AbstractInitDataBase.java | 136 ++++++++++-------- .../conscript/action/dm/DaMengDataBase.java | 15 +- .../action/kingbase8/KingBase8DataBase.java | 9 +- .../conscript/action/mysql/MySqlDataBase.java | 14 +- .../action/pgsql/PostgreSQLDataBase.java | 15 +- .../conscript/model/BaseVersionSQL.java | 67 +++++++++ 6 files changed, 180 insertions(+), 76 deletions(-) create mode 100644 src/main/java/com/gcc/airbase/conscript/model/BaseVersionSQL.java diff --git a/src/main/java/com/gcc/airbase/conscript/action/AbstractInitDataBase.java b/src/main/java/com/gcc/airbase/conscript/action/AbstractInitDataBase.java index 923def9..c7822e0 100644 --- a/src/main/java/com/gcc/airbase/conscript/action/AbstractInitDataBase.java +++ b/src/main/java/com/gcc/airbase/conscript/action/AbstractInitDataBase.java @@ -1,12 +1,12 @@ package com.gcc.airbase.conscript.action; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.resource.ClassPathResource; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.gcc.airbase.conscript.model.BaseVersionSQL; import com.gcc.airbase.conscript.model.ConscriptProperties; import com.gcc.airbase.conscript.model.DataBaseProperties; import com.gcc.airbase.conscript.util.SQLUtil; @@ -23,6 +23,7 @@ import java.util.*; @Slf4j public abstract class AbstractInitDataBase implements InitDataBase { + private BaseVersionSQL baseVersionSQLUtil; public Connection commConn = null; @@ -39,6 +40,7 @@ public abstract class AbstractInitDataBase implements InitDataBase { public AbstractInitDataBase(DataBaseProperties dataBaseProperties,ConscriptProperties conscriptProperties){ this.conscriptProperties = conscriptProperties; this.dataBaseProperties = dataBaseProperties; + this.baseVersionSQLUtil = new BaseVersionSQL(conscriptProperties.getTableName()); } /** @@ -51,11 +53,13 @@ public abstract class AbstractInitDataBase implements InitDataBase { */ public abstract void initDbConn(); + /** - * 建库语句 - * @return String + * 创建数据库实例 + * @return Boolean */ - public abstract String createDataBaseSQL(); + public abstract boolean createDataBase(); + @Override public boolean isInitEd() { @@ -71,7 +75,7 @@ public abstract class AbstractInitDataBase implements InitDataBase { if(testConnection()){ log.info("【Conscript】Database initialization :Successfully established a connection to the database."); Map sqlcontent; - if(databaseIsExitd(commConn)) { + if(databaseIsExist(commConn)) { initDbConn(); if(!exitDbVersionTable(dbConn)){ createDbVersionTable(); @@ -100,17 +104,16 @@ public abstract class AbstractInitDataBase implements InitDataBase { close(); } - @Override - public boolean testConnection() { - return null != commConn; - } - @Override - public Float getCurrenDbVersion(){ + /** + * 获取当前数据库版本号 + * @return Float + */ + private Float getCurrenDbVersion(){ float version = 0f; try { Statement stmt = dbConn.createStatement(); - ResultSet res = stmt.executeQuery("SELECT version FROM "+ conscriptProperties.getTableName()); + ResultSet res = stmt.executeQuery(this.baseVersionSQLUtil.builderSelectVersionSQL()); if(res.next()){ version = Float.parseFloat(res.getString("version")); }else{ @@ -123,14 +126,22 @@ public abstract class AbstractInitDataBase implements InitDataBase { return version; } - @Override - public boolean excuteSQL(Map sqlcontent) throws SQLException { + /** + * 执行初始化SQL语句 + * @param sqlcontent sql内容 + * @return Boolean + * @throws SQLException + */ + private boolean excuteSQL(Map sqlcontent) throws SQLException { String fileName = "Conscript"; try { dbConn.setAutoCommit(false); Statement stmt = dbConn.createStatement(); for (Map.Entry entry : sqlcontent.entrySet()) { - fileName = entry.getKey().split("&")[1]; + String[] mixtureKeys = entry.getKey().split("&"); + fileName = mixtureKeys[1]; + String version = mixtureKeys[0]; + String desc = mixtureKeys[2]; log.info("【Conscript】Database initialization :Upgrading sql file ——>{}",fileName); String[] sqls = entry.getValue().split(";"); for(String sql:sqls){ @@ -146,7 +157,7 @@ public abstract class AbstractInitDataBase implements InitDataBase { stmt.executeBatch(); dbConn.commit(); stmt.clearBatch(); - updateDbVersion(entry.getKey().split("&")[0]); + updateDbVersion(version,fileName,desc,sqls.length); dbConn.commit(); } log.info("【Conscript】Database initialization :version:"+getLatestVersion()); @@ -159,33 +170,11 @@ public abstract class AbstractInitDataBase implements InitDataBase { } return false; } - - - @Override - public boolean createDataBase() { - try { - Statement stmt = commConn.createStatement(); - stmt.execute(createDataBaseSQL()); - stmt.close(); - }catch (Exception e){ - log.error("【Conscript】Create {} Database Failed !!",dataBaseProperties.getDbName()); - return false; - } - return true; - } - - @Override - public void updateDbVersion(Object version) throws SQLException { - if(null == version){ - version = getLatestVersion(); - } - Statement state = dbConn.createStatement(); - state.execute("UPDATE "+conscriptProperties.getTableName()+" SET version = "+version+" , create_time = '"+ DateUtil.now()+"'"); - state.close(); - } - - @Override - public void close() throws SQLException{ + /** + * 关闭数据库连接 + * @throws SQLException + */ + private void close() throws SQLException{ if(null != commConn){ commConn.close(); commConn = null; @@ -196,6 +185,31 @@ public abstract class AbstractInitDataBase implements InitDataBase { } } + /** + * 数据库是否连接 + * @return Boolean + */ + private boolean testConnection() { + return null != commConn; + } + + /** + * 执行版本库升级 + * @param version 版本号 + * @param sqlFile sql文件 + * @param desc 描述 + * @param sqlSize sql数量 + * @throws SQLException + */ + private void updateDbVersion(Object version,String sqlFile,String desc,int sqlSize) throws SQLException { + if(null == version){ + version = getLatestVersion(); + } + Statement state = dbConn.createStatement(); + state.execute(baseVersionSQLUtil.builderInsertDbVersionSQL(String.valueOf(version),desc,sqlFile,sqlSize)); + // state.execute("UPDATE "+conscriptProperties.getTableName()+" SET version = "+version+" , create_time = '"+ DateUtil.now()+"'"); + state.close(); + } /** * 确认版本表是否存在 @@ -205,9 +219,9 @@ public abstract class AbstractInitDataBase implements InitDataBase { private Boolean exitDbVersionTable(Connection connection) throws SQLException { Statement statement = connection.createStatement(); try{ - ResultSet res = statement.executeQuery("SELECT version FROM "+ conscriptProperties.getTableName()); + ResultSet res = statement.executeQuery(baseVersionSQLUtil.builderSelectVersionSQL()); if(!res.next() || null == res.getString("version")){ - statement.execute(initDataVersionTableSQL()); + statement.execute(baseVersionSQLUtil.builderInitDbVersionSQL()); statement.close(); } return true; @@ -224,8 +238,8 @@ public abstract class AbstractInitDataBase implements InitDataBase { private void createDbVersionTable(){ try{ Statement stmt = dbConn.createStatement(); - stmt.execute(createVersionTableSQL()); - stmt.execute(initDataVersionTableSQL()); + stmt.execute(baseVersionSQLUtil.builderCreateTableSQL()); + stmt.execute(baseVersionSQLUtil.builderInitDbVersionSQL()); stmt.close(); }catch (Exception e){ e.printStackTrace(); @@ -274,20 +288,20 @@ public abstract class AbstractInitDataBase implements InitDataBase { /** * 根据版本号获取数据库升级文件 * @param ver 库中版本号 - * @return List "version&filename" + * @return List "version&filename&desc" */ private List getFileList(Float ver){ List result = new ArrayList<>(); if(0 == ver){ for(int i = 0;i < dbConfigFile.size();i++){ JSONObject temp = dbConfigFile.getJSONObject(i); - result.add(temp.getStr("version")+"&"+temp.getStr("sqlfile")); + result.add(temp.getStr("version")+"&"+temp.getStr("sqlfile")+"&"+temp.getStr("desc")); } }else{ for(int index = 0;index < dbConfigFile.size();index++){ JSONObject temp = dbConfigFile.getJSONObject(index); if(Float.parseFloat(temp.getStr("version")) > ver){ - result.add(temp.getStr("version")+"&"+temp.getStr("sqlfile")); + result.add(temp.getStr("version")+"&"+temp.getStr("sqlfile")+"&"+temp.getStr("desc")); } } } @@ -315,16 +329,18 @@ public abstract class AbstractInitDataBase implements InitDataBase { * 预制建表语句 * @return String */ - private String createVersionTableSQL(){ - return "CREATE TABLE "+conscriptProperties.getTableName()+" (\n" + - " id INT PRIMARY KEY NOT NULL,\n" + - " version CHAR(10) NOT NULL,\n" + - " create_time CHAR(50) NOT NULL\n" + ");"; - } - - private String initDataVersionTableSQL(){ - return "INSERT INTO "+conscriptProperties.getTableName()+" VALUES (1,'0.1','2021-12-01 08:00:00');"; - } +// private String createVersionTableSQL(){ +// return "CREATE TABLE "+conscriptProperties.getTableName()+" (\n" + +// " version VARCHAR(10),\n" + +// " desc TEXT,\n" + +// " sql_name TEXT,\n" + +// " sql_size INT,\n" + +// " execute_time VARCHAR(50)\n" + ");"; +// } + +// private String initDataVersionTableSQL(){ +// return "INSERT INTO "+conscriptProperties.getTableName()+" VALUES ('0.0','init conscript','inner.sql',2,'1900-01-01 00:00:00');"; +// } diff --git a/src/main/java/com/gcc/airbase/conscript/action/dm/DaMengDataBase.java b/src/main/java/com/gcc/airbase/conscript/action/dm/DaMengDataBase.java index 50c8311..302c661 100644 --- a/src/main/java/com/gcc/airbase/conscript/action/dm/DaMengDataBase.java +++ b/src/main/java/com/gcc/airbase/conscript/action/dm/DaMengDataBase.java @@ -41,7 +41,7 @@ public class DaMengDataBase extends AbstractInitDataBase { } @Override - public boolean databaseIsExitd(Connection connection) { + public boolean databaseIsExist(Connection connection) { try { Statement stmt = connection.createStatement(); ResultSet res = stmt.executeQuery("SELECT COUNT(DISTINCT object_name) AS NUM FROM ALL_OBJECTS WHERE object_type = 'SCH' AND object_name = '"+dataBaseProperties.getSchema()+"'"); @@ -56,9 +56,18 @@ public class DaMengDataBase extends AbstractInitDataBase { return false; } + @Override - public String createDataBaseSQL() { - return "CREATE SCHEMA \""+dataBaseProperties.getSchema()+"\" AUTHORIZATION \""+dataBaseProperties.getUsername()+"\" "; + public boolean createDataBase() { + try { + Statement stmt = commConn.createStatement(); + stmt.execute("CREATE SCHEMA \""+dataBaseProperties.getSchema()+"\" AUTHORIZATION \""+dataBaseProperties.getUsername()+"\" "); + stmt.close(); + }catch (Exception e){ + log.error("【Conscript】Create {} Database Failed !!",dataBaseProperties.getDbName()); + return false; + } + return true; } } diff --git a/src/main/java/com/gcc/airbase/conscript/action/kingbase8/KingBase8DataBase.java b/src/main/java/com/gcc/airbase/conscript/action/kingbase8/KingBase8DataBase.java index 326f28b..f51c908 100644 --- a/src/main/java/com/gcc/airbase/conscript/action/kingbase8/KingBase8DataBase.java +++ b/src/main/java/com/gcc/airbase/conscript/action/kingbase8/KingBase8DataBase.java @@ -47,7 +47,7 @@ public class KingBase8DataBase extends AbstractInitDataBase { try { Statement stmt = commConn.createStatement(); stmt.execute("CREATE DATABASE "+dataBaseProperties.getDbName()+" OWNER "+dataBaseProperties.getUsername()+" encoding 'utf8' CONNECTION LIMIT 10"); - stmt.execute(this.createDataBaseSQL()); + stmt.execute("CREATE SCHEMA \""+dataBaseProperties.getSchema()+"\" AUTHORIZATION \""+dataBaseProperties.getUsername()+"\" "); stmt.close(); }catch (Exception e){ log.error("【Conscript】Create {} Database Fail!",dataBaseProperties.getDbName()); @@ -57,12 +57,7 @@ public class KingBase8DataBase extends AbstractInitDataBase { } @Override - public String createDataBaseSQL() { - return "CREATE SCHEMA \""+dataBaseProperties.getSchema()+"\" AUTHORIZATION \""+dataBaseProperties.getUsername()+"\" "; - } - - @Override - public boolean databaseIsExitd(Connection connection) { + public boolean databaseIsExist(Connection connection) { try { Statement stmt = connection.createStatement(); ResultSet res = stmt.executeQuery("SELECT DATNAME FROM sys_database WHERE DATNAME = '"+dataBaseProperties.getDbName()+"'"); diff --git a/src/main/java/com/gcc/airbase/conscript/action/mysql/MySqlDataBase.java b/src/main/java/com/gcc/airbase/conscript/action/mysql/MySqlDataBase.java index 9e845c0..4c223e5 100644 --- a/src/main/java/com/gcc/airbase/conscript/action/mysql/MySqlDataBase.java +++ b/src/main/java/com/gcc/airbase/conscript/action/mysql/MySqlDataBase.java @@ -38,7 +38,7 @@ public class MySqlDataBase extends AbstractInitDataBase { } @Override - public boolean databaseIsExitd(Connection connection){ + public boolean databaseIsExist(Connection connection){ try { Statement stmt = connection.createStatement(); ResultSet res = stmt.executeQuery("SELECT COUNT(*) FROM information_schema.schemata WHERE schema_name= \""+ dataBaseProperties.getDbName()+"\""); @@ -54,8 +54,16 @@ public class MySqlDataBase extends AbstractInitDataBase { } @Override - public String createDataBaseSQL() { - return "CREATE DATABASE IF NOT EXISTS "+ dataBaseProperties.getDbName()+" DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"; + public boolean createDataBase() { + try { + Statement stmt = commConn.createStatement(); + stmt.execute("CREATE DATABASE IF NOT EXISTS "+ dataBaseProperties.getDbName()+" DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"); + stmt.close(); + }catch (Exception e){ + log.error("【Conscript】Create {} Database Failed !!",dataBaseProperties.getDbName()); + return false; + } + return true; } diff --git a/src/main/java/com/gcc/airbase/conscript/action/pgsql/PostgreSQLDataBase.java b/src/main/java/com/gcc/airbase/conscript/action/pgsql/PostgreSQLDataBase.java index 44aaa3c..f6f43db 100644 --- a/src/main/java/com/gcc/airbase/conscript/action/pgsql/PostgreSQLDataBase.java +++ b/src/main/java/com/gcc/airbase/conscript/action/pgsql/PostgreSQLDataBase.java @@ -39,7 +39,7 @@ public class PostgreSQLDataBase extends AbstractInitDataBase { } @Override - public boolean databaseIsExitd(Connection connection) { + public boolean databaseIsExist(Connection connection) { try { Statement stmt = connection.createStatement(); ResultSet res = stmt.executeQuery("SELECT datname FROM pg_database WHERE datname =\'"+ dataBaseProperties.getDbName()+"\'"); @@ -55,8 +55,17 @@ public class PostgreSQLDataBase extends AbstractInitDataBase { } @Override - public String createDataBaseSQL() { - return "CREATE DATABASE "+ dataBaseProperties.getDbName()+" WITH OWNER = "+dataBaseProperties.getUsername()+" ENCODING = 'UTF-8' "; + public boolean createDataBase() { + try { + Statement stmt = commConn.createStatement(); + stmt.execute("CREATE DATABASE "+ dataBaseProperties.getDbName()+" WITH OWNER = "+dataBaseProperties.getUsername()+" ENCODING = 'UTF-8' "); + stmt.close(); + }catch (Exception e){ + log.error("【Conscript】Create {} Database Failed !!",dataBaseProperties.getDbName()); + return false; + } + return true; } + } diff --git a/src/main/java/com/gcc/airbase/conscript/model/BaseVersionSQL.java b/src/main/java/com/gcc/airbase/conscript/model/BaseVersionSQL.java new file mode 100644 index 0000000..0555a13 --- /dev/null +++ b/src/main/java/com/gcc/airbase/conscript/model/BaseVersionSQL.java @@ -0,0 +1,67 @@ +package com.gcc.airbase.conscript.model; +import cn.hutool.core.date.DateUtil; + +/** + * 基础表信息SQL + */ +public class BaseVersionSQL { + + private String tableName; + + + public BaseVersionSQL(String tableName) { + this.tableName = tableName; + } + + /** + * 建表语句 + * @return String + */ + public String builderCreateTableSQL(){ + return "CREATE TABLE "+this.tableName+" (\n" + + " sql_version VARCHAR(10),\n" + + " sql_desc TEXT,\n" + + " sql_name TEXT,\n" + + " sql_size TEXT,\n" + + " execute_time VARCHAR(50)\n" + ");"; + } + + + public String builderSelectVersionSQL(){ + return "SELECT sql_version AS version FROM "+this.tableName+" ORDER BY execute_time DESC LIMIT 1;"; + } + + + /** + * 初始化SQL + * @return String + */ + public String builderInitDbVersionSQL(){ + return "INSERT INTO "+this.tableName+" VALUES ('0.0','init conscript','inner.sql','2','1900-01-01 00:00:00');"; + } + + + /** + * 生成插入SQL + * @param version 版本号 + * @param desc 描述 + * @param sqlName sql文件名称 + * @param sqlSize sql条数 + * @return String + */ + public String builderInsertDbVersionSQL(String version,String desc,String sqlName,Integer sqlSize){ + String executeTime = DateUtil.now(); + //todo 参数校验 + return "INSERT INTO "+this.tableName+" VALUES ('"+version+"','"+desc+"','"+ sqlName +"','"+sqlSize+"','"+executeTime+"');"; + } + + + + + + + + + + +} -- Gitee