提交 370cb070 authored 作者: zhangshuang's avatar zhangshuang

合并分支 'zs' 到 'master'

zs 查看合并请求 ty_wyl/adaptation-master1!10
...@@ -21,9 +21,9 @@ public class DBManage { ...@@ -21,9 +21,9 @@ public class DBManage {
private String userName;//用户名 private String userName;//用户名
private String password;//密码 private String password;//密码
private String databaseType;//数据库类型 private String databaseType;//数据库类型
private String driver;//数据库驱动 //private String driver;//数据库驱动
private String address;//连接地址 private String address;//连接地址
private String port;//数据库端口号 private String port;//数据库端口号
private String connectionType;//数据库连接时的sql //private String connectionType;//数据库连接时的sql
private Integer status;//逻辑删除 0-删除 1-未删除 private Integer status;//逻辑删除 0-删除 1-未删除
} }
...@@ -18,7 +18,7 @@ public class Regular { ...@@ -18,7 +18,7 @@ public class Regular {
*/ */
public static String mySqlRegular(String path,String sqlName){ public static String mySqlRegular(String path,String sqlName){
File file = new File(path); File file = new File(path);
String savePath = file.getParent() + "/" + sqlName + ".sql"; String savePath = file.getParent() + "/" + sqlName + ".sql";//导出的sql地址
File saveFile = new File(savePath); File saveFile = new File(savePath);
FileReader fileReader = null; FileReader fileReader = null;
BufferedReader bufferedReader = null; BufferedReader bufferedReader = null;
...@@ -30,112 +30,126 @@ public class Regular { ...@@ -30,112 +30,126 @@ public class Regular {
fileWriter = new FileWriter(saveFile); fileWriter = new FileWriter(saveFile);
bufferedWriter = new BufferedWriter(fileWriter); bufferedWriter = new BufferedWriter(fileWriter);
String s = ""; String s = "";
boolean database = true;//去除.sql中使用数据库的sql语句 boolean isFirstDrop = false;//去除.sql中使用数据库的sql语句
String tableName = null; String tableName = "";//数据库名称
String incrementField = null; String incrementField = "";//自增长字段
List<String> foreignList = new ArrayList<>(); List<String> foreignList = new ArrayList<>();
String previous = null; String previous = "";//上一个读取的行
String createTableSql = "";
boolean createLock = true;
boolean executeOne = true;
while ((s = bufferedReader.readLine()) != null){ while ((s = bufferedReader.readLine()) != null){
s = s.replaceAll("`","\""); s = s.replaceAll("`","\"");
s += "\r\n"; s += "\r\n";
//记录创建表时表的名字
if(lowerAndUpper(s,"CREATE") && lowerAndUpper(s,"TABLE")){
tableName = s.substring(s.indexOf("\"") + 1,s.lastIndexOf("\"")).trim();
createLock = false;
}
//转换mysql的int和bigint类型 //转换mysql的int和bigint类型
if(lowerAndUpper(s,"INT(")){ if(lowerAndUpper(s,"INT(")){
String dataType = s.substring(s.lastIndexOf("\"") + 1,s.indexOf("(")).trim(); String dataType = s.substring(s.lastIndexOf("\"") + 1,s.indexOf("(")).trim();
if(dataType.length() <= 4){
//int类型
String startChar = s.substring(0,s.indexOf("(")); String startChar = s.substring(0,s.indexOf("("));
String endChar = s.substring(s.indexOf(")") + 1); String endChar = s.substring(s.indexOf(")") + 1);
if(dataType.length() <= 4){
//int类型
s = startChar + "4" + endChar; s = startChar + "4" + endChar;
if(lowerAndUpper(s,"AUTO_INCREMENT")){ if(lowerAndUpper(s,"AUTO_INCREMENT")){
s = replaceLowerAndUpper(s,"AUTO_INCREMENT","");
s = replaceLowerAndUpper(s,"INT4","serial"); s = replaceLowerAndUpper(s,"INT4","serial");
incrementField = s.substring(s.indexOf("\"") + 1,s.lastIndexOf("\""));
} }
}else { }else {
//bigint类型
if(lowerAndUpper(s,"BIGINT")){
String startChar = s.substring(0,s.indexOf("("));
String endChar = s.substring(s.indexOf(")") + 1);
s = startChar + endChar; s = startChar + endChar;
if(lowerAndUpper(s,"AUTO_INCREMENT")){ //bigint类型
s = replaceLowerAndUpper(s,"AUTO_INCREMENT",""); if(lowerAndUpper(s,"BIGINT") && lowerAndUpper(s,"AUTO_INCREMENT")){
s = replaceLowerAndUpper(s,"BIGINT","bigserial"); s = replaceLowerAndUpper(s,"BIGINT","bigserial");
incrementField = s.substring(s.indexOf("\"") + 1,s.lastIndexOf("\"")); }else if(lowerAndUpper(s,"SMALLINT") && lowerAndUpper(s,"AUTO_INCREMENT")){
}
}else if(lowerAndUpper(s,"SMALLINT")){
String startChar = s.substring(0,s.indexOf("("));
String endChar = s.substring(s.indexOf(")") + 1);
s = startChar + endChar;
if(lowerAndUpper(s,"AUTO_INCREMENT")){
s = replaceLowerAndUpper(s,"AUTO_INCREMENT","");
s = replaceLowerAndUpper(s,"SMALLINT","smallserial"); s = replaceLowerAndUpper(s,"SMALLINT","smallserial");
incrementField = s.substring(s.indexOf("\"") + 1,s.lastIndexOf("\""));
}
} }
} }
s = replaceLowerAndUpper(s,"AUTO_INCREMENT","");
incrementField = s.substring(s.indexOf("\"") + 1,s.lastIndexOf("\""));
} }
//转换mysql的时间datetime类型 //转换mysql的时间datetime类型
s = StringType(s,"datetime","timestamp"); s = StringType(s,"datetime","timestamp");
//转换mysql的double类型 //转换mysql的double类型
s = StringType(s,"double","float"); s = StringType(s,"double","float");
//插入值时boolean类型转换 //插入值时boolean类型转换
if(s.contains("bit(1)")){ s = replaceLowerAndUpper(s,"BIT(1)","boolean");
s = replaceLowerAndUpper(s,"bit(1)","boolean"); //将\0与\1替换为true或false
}
if(s.contains("'\\0'")){
s = s.replace("'\\0'","'false'"); s = s.replace("'\\0'","'false'");
} s = s.replace("'\\1'","'true'");
if(s.contains("'\\1'")){ //从第一个创建表的可执行命令开始
s = s.replace("'\\1'","true"); if(lowerAndUpper(s,"DROP") && lowerAndUpper(s,"TABLE") && executeOne){
} isFirstDrop = true;
//记录创建表时表的名字 executeOne = false;
if(lowerAndUpper(s,"CREATE") && lowerAndUpper(s,"TABLE")){
tableName = s.substring(s.indexOf("\"") + 1,s.lastIndexOf("\"")).trim();
} }
//去除表类型的定义 //去除表类型的定义
if(lowerAndUpper(s,"ENGINE") && lowerAndUpper(s,"CHARSET")){ if(lowerAndUpper(s,"ENGINE") && lowerAndUpper(s,"CHARSET")){
if(lowerAndUpper(s,"AUTO_INCREMENT")){
String[] array = s.split(" "); String[] array = s.split(" ");
if(lowerAndUpper(s,"AUTO_INCREMENT")){
for(String a:array){ for(String a:array){
if(lowerAndUpper(a.trim(),"AUTO_INCREMENT")){ if(lowerAndUpper(a.trim(),"AUTO_INCREMENT")){
String num = a.substring(a.indexOf("=") + 1); String num = a.substring(a.indexOf("=") + 1);
String alterIncrementInital = "SELECT setval('\"" + tableName + "_" + incrementField + "_seq\"'," + (Integer.parseInt(num) - 1) + ", true);\r\n"; s = ");\r\nSELECT setval('\"" + tableName + "_" + incrementField + "_seq\"'," + (Integer.parseInt(num) - 1) + ", true);\r\n";
s = ");\r\n";
s = s + alterIncrementInital;
} }
} }
}else { }else {
s = ");\r\n"; s = ");\r\n";
} }
} }
//去除.sql中使用数据库的sql语句
if(s.contains("USE") && s.contains(";") && s.contains("\"") && database){
database = false;
}else {
//逗号去除
//mysql的外键key值去除
if(previous != null){
if(lowerAndUpper(s,"KEY") && !lowerAndUpper(s,"FOREIGN") && !lowerAndUpper(s,"PRIMARY")) {
String startChar = s.substring(0,s.indexOf("\""));
if(lowerAndUpper(startChar,"KEY")){
previous = previous.substring(0,previous.lastIndexOf(",")) +"\r\n";
s = "";
}
}
//msql的外键设置移动位置 //msql的外键设置移动位置
if(lowerAndUpper(s,"FOREIGN") && lowerAndUpper(s,"KEY") && lowerAndUpper(s,"CONSTRAINT")){ if(lowerAndUpper(s,"FOREIGN") && lowerAndUpper(s,"KEY") && lowerAndUpper(s,"CONSTRAINT")){
s = "ALTER TABLE \"public\".\"" + tableName + "\" ADD " + s + " ON DELETE NO ACTION ON UPDATE NO ACTION;\r\n"; s = "ALTER TABLE \"public\".\"" + tableName + "\" ADD " + s + " ON DELETE NO ACTION ON UPDATE NO ACTION;\r\n";
foreignList.add(s); foreignList.add(s);
s = ""; s = "";
}
if(previous != null && isFirstDrop){
//对创建表再做一次检查
if(lowerAndUpper(s,");")){
createLock = true;
}
createTableSql += s;
if(createLock){
if(createTableSql != null && createTableSql != "" && createTableSql.contains(");") && lowerAndUpper(createTableSql,"CREATE") && lowerAndUpper(createTableSql,"TABLE")){
//mysql的外键key值去除
String[] array = createTableSql.split(",");
createTableSql = "";
for(String a:array){
String startChar = "";
if(a.contains("\"")){
startChar = a.substring(0,a.indexOf("\""));
}
//不是索引
if(!(lowerAndUpper(startChar,"KEY") && !(lowerAndUpper(startChar,"FOREIGN") || lowerAndUpper(startChar,"PRIMARY")))){
createTableSql += a;
if(!a.contains(");")){
createTableSql += ",";
}
}else { }else {
bufferedWriter.write(previous); //索引
if(lowerAndUpper(a,"USING") && lowerAndUpper(a,"BTREE")) {
} }
} }
previous = s; }
//逗号去除
String removeCommas = "";
if(createTableSql.contains(",") && createTableSql.contains(");")){
removeCommas = createTableSql.substring(createTableSql.lastIndexOf(",") + 1,createTableSql.lastIndexOf(")"));
}
if(removeCommas.equals("\r\n")){
String startChar = createTableSql.substring(0,createTableSql.lastIndexOf(","));
String endChar = createTableSql.substring(createTableSql.lastIndexOf(",") + 1);
createTableSql = startChar + endChar;
} }
} }
//写入最后一句 previous = createTableSql;
createTableSql = "";
bufferedWriter.write(previous); bufferedWriter.write(previous);
}
}
previous = s;
}
//写入创建外键的sql语句 //写入创建外键的sql语句
for(String list:foreignList){ for(String list:foreignList){
bufferedWriter.write(list); bufferedWriter.write(list);
...@@ -210,9 +224,16 @@ public class Regular { ...@@ -210,9 +224,16 @@ public class Regular {
*/ */
public static Connection databaseConnection(DBManage databaseManagement){ public static Connection databaseConnection(DBManage databaseManagement){
Connection connection = null; Connection connection = null;
String driver = null;
String connectionType = null;
//highgo
if(databaseManagement.getDatabaseType().equals("highgo")){
driver = "org.postgresql.Driver";
connectionType = "postgresql";
}
try { try {
Class.forName(databaseManagement.getDriver()); Class.forName(driver);
String connectionUrl = "jdbc:" + databaseManagement.getConnectionType() + ":" + "//" + databaseManagement.getAddress() + ":" + databaseManagement.getPort() + "/" + databaseManagement.getDatabaseName(); String connectionUrl = "jdbc:" + connectionType + ":" + "//" + databaseManagement.getAddress() + ":" + databaseManagement.getPort() + "/" + databaseManagement.getDatabaseName();
connection = DriverManager.getConnection(connectionUrl,databaseManagement.getUserName(),databaseManagement.getPassword()); connection = DriverManager.getConnection(connectionUrl,databaseManagement.getUserName(),databaseManagement.getPassword());
return connection; return connection;
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
...@@ -225,6 +246,6 @@ public class Regular { ...@@ -225,6 +246,6 @@ public class Regular {
public static void main(String[] args) { public static void main(String[] args) {
mySqlRegular("C:\\Users\\admin\\Desktop\\database\\hrm.sql","else"); mySqlRegular("C:\\Users\\admin\\Desktop\\database\\hrm.sql","debug");
} }
} }
...@@ -2,16 +2,8 @@ package com.zjty.adaptationmaster; ...@@ -2,16 +2,8 @@ package com.zjty.adaptationmaster;
public class Test4 { public class Test4 {
public static void main(String[] args) { public static void main(String[] args) {
String a = "CREATE TABLE \"routine_human_list\" (\n" + String a = "\r\n KEY \"FK14pq56p21er9aref4rplla3ef\" (\"routine_routine_id\")\n" +
" \"routine_routine_id\" varchar(255) NOT NULL,\n" + ");";
" \"human_list\" varchar(255) DEFAULT NULL,\n" + System.out.println(a.substring(0,a.indexOf("\"")));
")";
String endChar = a.substring(a.lastIndexOf("\"") + 1);
if(endChar.contains(",")){
String start = a.substring(0,a.lastIndexOf(","));
String end = a.substring(a.lastIndexOf(",") + 1);
a = start + end;
System.out.println(a);
}
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论