提交 ca8f77f7 authored 作者: wyl's avatar wyl

提交

......@@ -35,6 +35,16 @@
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
......
package com.zjty.adaptationmaster.adaptor.entity.db;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.HashMap;
import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class RegularReturn {
private String path;//路径
private HashMap<String, List<String>> nameHashMap;
}
package com.zjty.adaptationmaster.adaptor.service.Impl;
import com.zjty.adaptationmaster.adaptor.entity.db.DBManage;
import com.zjty.adaptationmaster.adaptor.entity.db.DBNameReturn;
import com.zjty.adaptationmaster.adaptor.entity.db.DBRecord;
import com.zjty.adaptationmaster.adaptor.entity.db.DatabaseResponse;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.zjty.adaptationmaster.adaptor.entity.db.*;
import com.zjty.adaptationmaster.adaptor.repository.DBManageDao;
import com.zjty.adaptationmaster.adaptor.repository.DBRecordDao;
import com.zjty.adaptationmaster.adaptor.service.DBMigrateService;
......@@ -22,9 +21,7 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
@Service
@Slf4j
......@@ -51,18 +48,17 @@ public class DBMigrateServiceImpl implements DBMigrateService {
String databaseName = databaseResponse.getDatabaseName();
//查询新建的数据库是否存在
ServerResponse serverResponse = findDBByDBType(databaseResponse.getId());
Object obj = serverResponse.getData();
String data = serverResponse.getData().toString();
String dbName = data.substring(data.indexOf("[") + 1,data.lastIndexOf("]"));
String[] dbNameArray = dbName.split(",");
List<String> dbNameList1 = Arrays.asList(dbNameArray);
List<String> dbNameList = new ArrayList<>();
if(obj instanceof ArrayList<?>){
for(Object o:((List<?>) obj)){
dbNameList.add(String.class.cast(o));
}
}
if(dbNameList.contains(databaseName)){
dbNameList1.forEach(db -> dbNameList.add(db.trim()));
if(dbNameList != null && dbNameList.size() != 0 && dbNameList.contains(databaseName)){
log.info("该数据库已存在,请重新填写数据库名称");
return ServerResponse.error("该数据库已存在,请重新填写数据库名称");
}
//转换后的.sql文件地址
//转换后的.sql返回值
String path = "";
//根据传入的生成数据库类型,查找未被删除的配置文件
DBManage databaseManagement = dbManageDao.findDBManageByIdAndStatus(databaseResponse.getId(),1);
......@@ -74,6 +70,7 @@ public class DBMigrateServiceImpl implements DBMigrateService {
databaseManagement.setDriver(highgoDriver);
databaseManagement.setConnectionType(highgoConnnectionType);
Connection connection = Regular.databaseConnection(databaseManagement);
boolean errorOccur = false;
if(connection != null){
PreparedStatement preparedStatement = null;
try {
......@@ -83,11 +80,14 @@ public class DBMigrateServiceImpl implements DBMigrateService {
} catch (SQLException e) {
e.printStackTrace();
log.info("创建数据库:" + databaseName + "出错");
return ServerResponse.error("创建数据库:" + databaseName + "出错");
errorOccur = true;
}finally {
try {
preparedStatement.close();
connection.close();
if(errorOccur){
return ServerResponse.error("创建数据库:" + databaseName + "出错");
}
} catch (SQLException e) {
e.printStackTrace();
}
......@@ -98,7 +98,10 @@ public class DBMigrateServiceImpl implements DBMigrateService {
dbManage1.setDatabaseName(databaseName);
Connection connection1 = Regular.databaseConnection(dbManage1);
if(connection1 != null){
long a = System.currentTimeMillis();
path = Regular.mySqlRegular(databaseResponse.getSqlPath(),databaseName);
long b = System.currentTimeMillis();
System.out.println("替换规则时间为:" + (b - a));
File file = new File(path);
FileReader fileReader = null;
BufferedReader bufferedReader = null;
......@@ -123,6 +126,7 @@ public class DBMigrateServiceImpl implements DBMigrateService {
continue;
}
}
System.out.println("sql执行时间为:" + (System.currentTimeMillis() - b));
log.info(databaseResponse.getSqlPath() + "执行完成");
} catch (Exception e) {
e.printStackTrace();
......
......@@ -2,6 +2,7 @@ package com.zjty.adaptationmaster.utils;
import com.zjty.adaptationmaster.adaptor.entity.SystemVariable;
import com.zjty.adaptationmaster.adaptor.entity.db.DBManage;
import com.zjty.adaptationmaster.adaptor.entity.db.RegularReturn;
import org.springframework.core.env.Environment;
import java.io.*;
......@@ -9,6 +10,8 @@ import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
public class Regular {
......@@ -18,7 +21,7 @@ public class Regular {
* @param path sql文件地址
* @param sqlName 数据库名字
*/
public static String mySqlRegular(String path,String sqlName){
public static String mySqlRegular(String path, String sqlName){
File file = new File(path);
File fileParent = new File(file.getParent() + "/transformSql");
if(!fileParent.exists()){
......@@ -35,7 +38,7 @@ public class Regular {
bufferedReader = new BufferedReader(fileReader);
fileWriter = new FileWriter(saveFile);
bufferedWriter = new BufferedWriter(fileWriter);
String s = "";
String s;
boolean isFirstDrop = false;//去除.sql中使用数据库的sql语句
String tableName = "";//数据库名称
String incrementField = "";//自增长字段
......@@ -52,12 +55,19 @@ public class Regular {
//将\0与\1替换为true或false
s = s.replace("'\\0'","'false'");
s = s.replace("'\\1'","'true'");
s = s.replaceAll("'0000-00-00 00:00:00'","null");
s = s.replace("\\\\","\\");//转义\
s = s.replace("\\\"","\"");//转义"
s = s.replace("\\'","''");//转义'
bufferedWriter.write(s);
continue;
}
//记录自增字段
if(lowerAndUpper(s,"PRIMARY") && lowerAndUpper(s,"KEY")){
incrementField = s.substring(s.indexOf("\"") + 1,s.lastIndexOf("\""));
s = replaceLowerAndUpper(s,"USING","");
s = replaceLowerAndUpper(s,"BTREE","");
s = replaceLowerAndUpper(s,",","");
}
//记录创建表时表的名字
if(lowerAndUpper(s,"CREATE") && lowerAndUpper(s,"TABLE")){
......@@ -84,6 +94,7 @@ public class Regular {
s = replaceLowerAndUpper(s,"SMALLINT","smallserial");
}
}
s = replaceLowerAndUpper(s,"tinyint","smallint");
s = replaceLowerAndUpper(s,"AUTO_INCREMENT","");
}
//转换mysql的时间datetime类型
......@@ -118,7 +129,7 @@ public class Regular {
//msql的外键设置移动位置
if(lowerAndUpper(s,"FOREIGN") && lowerAndUpper(s,"KEY") && lowerAndUpper(s,"CONSTRAINT")){
// ON DELETE NO ACTION ON UPDATE NO ACTION
s = "ALTER TABLE \"public\".\"" + tableName + "\" ADD " + s.replace("\r\n","") + ";\r\n";
s = "ALTER TABLE \"public\".\"" + tableName + "\" ADD " + s.replaceAll("\r\n","") + ";\r\n";
foreignList.add(s);
s = "";
}
......@@ -225,8 +236,8 @@ public class Regular {
* 大小写都替换
*/
public static String replaceLowerAndUpper(String s,String upper,String replacement){
s = s.replace(upper,replacement);
s = s.replace(upper.toLowerCase(),replacement);
s = s.replaceAll(upper,replacement);
s = s.replaceAll(upper.toLowerCase(),replacement);
return s;
}
......@@ -279,6 +290,6 @@ public class Regular {
public static void main(String[] args) {
mySqlRegular("C:\\Users\\admin\\Desktop\\database\\hrm.sql","hrm");
mySqlRegular("C:\\Users\\admin\\Desktop\\database\\editor.sql","test5");
}
}
......@@ -2,13 +2,10 @@ package com.zjty.adaptationmaster;
public class Test4 {
public static void main(String[] args) {
String a = "sdaf = df ccc = 18 adfasdf = utf8";
int begin= a.indexOf("ccc");
for(int i = begin;i < a.length();i++){
String m = a.charAt(i) + "";
if(m.matches("\\d")){
System.out.println(m);
}
String s = "123)456)789)0";
String[] array = s.split("\\)");
for(String si:array){
System.out.println(si);
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论