|
@@ -326,8 +326,8 @@ public class TableInfoServiceImpl implements ITableInfoService {
|
|
|
return stringBuilder.toString();
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
|
- //备份要删除的表sql
|
|
|
- String backupSql = tableInfoMapper.backupTableSql(databaseName,tableName).get("Create Table");
|
|
|
+ // 暂存要删除的表sql
|
|
|
+ String backupSql = tableInfoMapper.backupTableSql(databaseName, tableName).get("Create Table");
|
|
|
try {
|
|
|
tableInfoMapper.updateMysqlTable(databaseName, tableName, tableComment, list);
|
|
|
} catch (Exception e) {
|
|
@@ -614,24 +614,34 @@ public class TableInfoServiceImpl implements ITableInfoService {
|
|
|
public AjaxResult initDatabase(DataSource dataSource) {
|
|
|
RestTemplate restTemplate = new RestTemplate();
|
|
|
//创建连接
|
|
|
- Connection con;
|
|
|
- Statement st;
|
|
|
+ Connection tenantCon;
|
|
|
+ Statement tenantSt;
|
|
|
String driverName = null;
|
|
|
String dbURL = null;
|
|
|
String userName = dataSource.getUsername();
|
|
|
String userPwd = dataSource.getPassword();
|
|
|
-
|
|
|
+ // 基础模版信息库
|
|
|
String foundationDriverName = null;
|
|
|
- String foundationDBURL = null;
|
|
|
- String foundationUserName = dataSource.getUsername();
|
|
|
- String foundationUserPwd = dataSource.getPassword();
|
|
|
-
|
|
|
+ String foundationDBURL = "";
|
|
|
+ String foundationUserName = "";
|
|
|
+ String foundationUserPwd = "";
|
|
|
+ String foundationSQL = "";
|
|
|
+ String foundationENDSQL = "";
|
|
|
|
|
|
//查询数据库sql
|
|
|
String showDatabaseSql = null;
|
|
|
//创建数据库
|
|
|
String createDatabaseSql = null;
|
|
|
-
|
|
|
+ // 基础模版信息
|
|
|
+ Map<String, Object> infoMap = new HashMap<>();
|
|
|
+ // 得到mysql的基础数据表模版
|
|
|
+ String ret = restTemplate.getForObject(dictIp + dataSource.getDatabaseType() + "_connection_information", String.class);
|
|
|
+ // 得到基础模版库的连接信息
|
|
|
+ Map<String, List<Map<String, Object>>> retMap = (Map<String, List<Map<String, Object>>>) JSON.parse(ret);
|
|
|
+ retMap.get("data").forEach(item ->
|
|
|
+ {
|
|
|
+ infoMap.put(item.get("dictLabel").toString(), item.get("dictValue"));
|
|
|
+ });
|
|
|
//判断数据源,初始化对应创建信息
|
|
|
switch (dataSource.getDatabaseType()) {
|
|
|
case "mysql":
|
|
@@ -639,155 +649,99 @@ public class TableInfoServiceImpl implements ITableInfoService {
|
|
|
dbURL = "jdbc:mysql://" + dataSource.getDatabaseIp() + ":" + dataSource.getPortNumber();
|
|
|
showDatabaseSql = "show DATABASES";
|
|
|
createDatabaseSql = "CREATE DATABASE IF NOT EXISTS `" + dataSource.getDatabaseName() + "` DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;";
|
|
|
- // 得到mysql的基础数据表模版
|
|
|
- String ret = restTemplate.getForObject(dictIp + "mysql_connection_information", String.class);
|
|
|
- // 得到基础模版库的连接信息
|
|
|
- Map<String, List<Map<String, Object>>> retMap = (Map<String, List<Map<String, Object>>>) JSON.parse(ret);
|
|
|
- retMap.get("data").forEach(item -> {
|
|
|
-
|
|
|
- });
|
|
|
-
|
|
|
-
|
|
|
- // 建立连接查询得到所有表以及所有表信息
|
|
|
-
|
|
|
-
|
|
|
- // 封装数据,执行创建表操作
|
|
|
-
|
|
|
-
|
|
|
+ // 封装mysql基础库信息连接信息
|
|
|
+ foundationDriverName = "com.mysql.cj.jdbc.Driver";
|
|
|
+ foundationDBURL += "jdbc:mysql://" + infoMap.get("databaseIp") + ":" + infoMap.get("portNumber") + "/" + infoMap.get("databaseName") + "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
|
|
|
+ foundationUserName += infoMap.get("username");
|
|
|
+ foundationUserPwd += infoMap.get("password");
|
|
|
+ foundationSQL += "SHOW TABLES;";
|
|
|
+ foundationENDSQL += "SHOW CREATE TABLE `" + infoMap.get("databaseName") + "`.`tableName`";
|
|
|
break;
|
|
|
case "sqlserver":
|
|
|
driverName = LoadDriverConstants.SQLSERVER;
|
|
|
dbURL = "jdbc:sqlserver://" + dataSource.getDatabaseIp() + ":" + dataSource.getPortNumber() + ";DatabaseName=;trustServerCertificate=true;";
|
|
|
showDatabaseSql = "select name from sys.databases";
|
|
|
createDatabaseSql = "CREATE DATABASE " + dataSource.getDatabaseName();
|
|
|
- // 得到sqlserver的基础数据表模版
|
|
|
-
|
|
|
+ // 封装sqlserver基础库信息连接信息
|
|
|
+ foundationDriverName = "com.mysql.cj.jdbc.Driver";
|
|
|
+ foundationDBURL += "jdbc:sqlserver://" + infoMap.get("databaseIp") + ":" + infoMap.get("portNumber") + ";DatabaseName=" + infoMap.get("databaseName") + ";trustServerCertificate=true;";
|
|
|
+ foundationUserName += infoMap.get("username");
|
|
|
+ foundationUserPwd += infoMap.get("password");
|
|
|
break;
|
|
|
case "dm":
|
|
|
driverName = LoadDriverConstants.DM;
|
|
|
dbURL = "jdbc:dm://" + dataSource.getDatabaseIp() + ":" + dataSource.getPortNumber();
|
|
|
showDatabaseSql = "select name from sysobjects where TYPE$='sch' and SUBTYPE$ is null";
|
|
|
createDatabaseSql = "CREATE SCHEMA " + dataSource.getDatabaseName();
|
|
|
- // 得到dm的基础数据表模版
|
|
|
-
|
|
|
-
|
|
|
+ // 封装dm基础库信息连接信息
|
|
|
+ foundationDriverName = "com.mysql.cj.jdbc.Driver";
|
|
|
+ foundationDBURL += "jdbc:mysql://" + infoMap.get("databaseIp") + ":" + infoMap.get("portNumber") + "/" + infoMap.get("databaseName") + "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
|
|
|
+ foundationUserName += infoMap.get("username");
|
|
|
+ foundationUserPwd += infoMap.get("password");
|
|
|
break;
|
|
|
case "oracle":
|
|
|
driverName = LoadDriverConstants.ORACLE;
|
|
|
dbURL = "jdbc:oracle:thin:@" + dataSource.getDatabaseIp() + ":" + dataSource.getPortNumber();
|
|
|
- // 得到oracle的基础数据表模版
|
|
|
-
|
|
|
-
|
|
|
+ // 封装oracle基础库信息连接信息
|
|
|
+ foundationDriverName = "com.mysql.cj.jdbc.Driver";
|
|
|
+ foundationDBURL += "jdbc:mysql://" + infoMap.get("databaseIp") + ":" + infoMap.get("portNumber") + "/" + infoMap.get("databaseName") + "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
|
|
|
+ foundationUserName += infoMap.get("username");
|
|
|
+ foundationUserPwd += infoMap.get("password");
|
|
|
break;
|
|
|
// 如果还有其他字段需要处理,可以继续添加case分支
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
- if (true) return null;
|
|
|
try {
|
|
|
+ // 建立数据源连接
|
|
|
Class.forName(driverName);
|
|
|
- con = DriverManager.getConnection(dbURL, userName, userPwd);
|
|
|
- st = con.createStatement();
|
|
|
-
|
|
|
-
|
|
|
+ tenantCon = DriverManager.getConnection(dbURL, userName, userPwd);
|
|
|
+ tenantSt = tenantCon.createStatement();
|
|
|
//查询所有数据库
|
|
|
- ResultSet rs = st.executeQuery(showDatabaseSql);
|
|
|
- while (rs.next()) {//如果对象中有数据,就会循环打印出来
|
|
|
- System.out.println(rs.getString(1));
|
|
|
- if (rs.getString(1).equals(dataSource.getDatabaseName())) {
|
|
|
+ ResultSet tenantRs = tenantSt.executeQuery(showDatabaseSql);
|
|
|
+ while (tenantRs.next()) {//如果对象中有数据,就会循环打印出来
|
|
|
+ System.out.println(tenantRs.getString(1));
|
|
|
+ if (tenantRs.getString(1).equals(dataSource.getDatabaseName())) {
|
|
|
return AjaxResult.warn("数据库已存在!");
|
|
|
}
|
|
|
}
|
|
|
//创建数据库
|
|
|
- st.executeUpdate(createDatabaseSql);
|
|
|
+ tenantSt.executeUpdate(createDatabaseSql);
|
|
|
+ // 建立连接查询得到所有表以及所有表信息
|
|
|
+ Class.forName(foundationDriverName);
|
|
|
+ Connection foundationCon = DriverManager.getConnection(foundationDBURL, foundationUserName, foundationUserPwd);
|
|
|
+ Statement foundationSt = foundationCon.createStatement();
|
|
|
+ //查询当前库中的所有表信息
|
|
|
+ ResultSet foundationRs = foundationSt.executeQuery(foundationSQL);
|
|
|
+
|
|
|
+ List<String> tableNameList = new ArrayList<>();
|
|
|
+ // 封装数据,执行创建表操作
|
|
|
+ while (foundationRs.next()) {
|
|
|
+ // 得到结果集->表名称
|
|
|
+ tableNameList.add(foundationRs.getString(1));
|
|
|
+ }
|
|
|
+ // 选择执行的sql语句
|
|
|
+ tenantSt.executeUpdate("USE `" + dataSource.getDatabaseName() + "`");
|
|
|
+ for (int i = 0; i < tableNameList.size(); i++) {
|
|
|
+ // 根据表名得到当前表结构信息
|
|
|
+ ResultSet structureRs = foundationSt.executeQuery(foundationENDSQL.replace("tableName", tableNameList.get(i)));
|
|
|
+ while (structureRs.next()) {
|
|
|
+ // 增加租户基础表
|
|
|
+ tenantSt.executeUpdate(structureRs.getString(2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 关闭数据库连接
|
|
|
+ tenantRs.close();
|
|
|
+ tenantSt.close();
|
|
|
+ tenantCon.close();
|
|
|
+ /////////////////
|
|
|
+ foundationRs.close();
|
|
|
+ foundationSt.close();
|
|
|
+ foundationCon.close();
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
return AjaxResult.warn("初始化数据库异常,请确保连接信息无误!");
|
|
|
}
|
|
|
return AjaxResult.success();
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- public static void asd() throws Exception {
|
|
|
- //Class.forName("dm.jdbc.driver.DmDriver");
|
|
|
- Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
|
|
|
- try (
|
|
|
- //sqlserver
|
|
|
- Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=test;trustServerCertificate=true;", "sa", "root1234");
|
|
|
- //达梦
|
|
|
- // Connection con = DriverManager.getConnection("jdbc:dm://192.168.110.52:5236", "sysdba", "sysdba1234");
|
|
|
- JdbcRowSet jrs = new JdbcRowSetImpl(con);
|
|
|
- ) {
|
|
|
-
|
|
|
- //查询达梦数据库
|
|
|
- //jrs.setCommand("select name from sysobjects where TYPE$='sch' and SUBTYPE$ is null");
|
|
|
-
|
|
|
- //查询sqlserver数据库
|
|
|
- jrs.setCommand("select name from sys.databases;");
|
|
|
- jrs.execute();
|
|
|
-
|
|
|
- while (jrs.next()) {
|
|
|
- System.out.println(jrs.getString(1));
|
|
|
-// System.out.println(jrs.getString(1) + "\t" + jrs.getString(2) + "\t" + jrs.getString(3));
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- System.out.println(e.getMessage());
|
|
|
- e.printStackTrace();
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //创建数据库
|
|
|
- public void aa() throws Exception {
|
|
|
- Connection con;
|
|
|
- Statement st;
|
|
|
- String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
|
|
|
- String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=;trustServerCertificate=true;";
|
|
|
- String userName = "sa";
|
|
|
- String userPwd = "root1234";
|
|
|
-
|
|
|
- try {
|
|
|
- Class.forName(driverName); //jdk版本6.0以上可以省略这句话
|
|
|
- con = DriverManager.getConnection(dbURL, userName, userPwd);
|
|
|
-
|
|
|
- st = con.createStatement();
|
|
|
-
|
|
|
- //查询sql
|
|
|
-// String sql= "select name from sys.databases;";
|
|
|
-// ResultSet rs = st.executeQuery(sql);
|
|
|
-// while(rs.next()){//如果对象中有数据,就会循环打印出来
|
|
|
-// System.out.println(rs.getString(1));
|
|
|
-// }
|
|
|
-
|
|
|
- //创建数据库
|
|
|
- String sql = "CREATE DATABASE hans;";
|
|
|
- st.executeUpdate(sql);
|
|
|
-
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-// Connection con;
|
|
|
-// Statement st;
|
|
|
-// publicstatic void main(String [] args)
|
|
|
-// {
|
|
|
-// StringdriverName=”com.microsoft.sqlserver.jdbc.SQLServerDriver”;
|
|
|
-// StringdbURL=”jdbc:sqlserver://localhost:1433;DatabaseName=你的数据库名”;
|
|
|
-// String userName=”填写之前设置的用户名”;
|
|
|
-// String userPwd=”填写密码”;
|
|
|
-// String sql=“这里填写你想输入的SQL语句”;
|
|
|
-// try
|
|
|
-// {
|
|
|
-// Class.forName(driverName); //jdk版本6.0以上可以省略这句话
|
|
|
-// con=DriverManager.getConnection(dbURL,userName,userPwd);
|
|
|
-// st=con.createStatement();
|
|
|
-// st.executeUpdate(sql);
|
|
|
-// }catch(Exception e)
|
|
|
-// {
|
|
|
-// e.printStackTrace();
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
}
|