package jna;
/**
* @author wushaopei
* @create 2023-04-27 9:28
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SqlTypeChecker {
public static void main(String[] args) {
String fileName = "test.sql";
String sqlContent = readSqlFile(fileName);
if (isOracle(sqlContent)) {
System.out.println("The SQL script is for Oracle database.");
} else if (isMySQL(sqlContent)) {
System.out.println("The SQL script is for MySQL database.");
} else {
System.out.println("Unable to determine the database type.");
}
}
private static String readSqlFile(String fileName) {
StringBuilder sb = new StringBuilder();
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
private static boolean isOracle(String sqlContent) {
Pattern pattern = Pattern.compile("(?i)\\bDUAL\\b");
Matcher matcher = pattern.matcher(sqlContent);
if (matcher.find()) {
return true;
}
pattern = Pattern.compile("(?i)\\bCREATE\\s+TABLE\\b");
matcher = pattern.matcher(sqlContent);
if (matcher.find()) {
pattern = Pattern.compile("(?i)\\bSEQUENCE\\b");
matcher = pattern.matcher(sqlContent);
if (matcher.find()) {
return true;
}
pattern = Pattern.compile("(?i)\\bCONSTRAINT\\b.*\\bPRIMARY\\s+KEY\\b");
matcher = pattern.matcher(sqlContent);
if (matcher.find()) {
return true;
}
}
pattern = Pattern.compile("(?i)\\bTRUNCATE\\s+TABLE\\b");
matcher = pattern.matcher(sqlContent);
if (matcher.find()) {
return true;
}
return false;
}
private static boolean isMySQL(String sqlContent) {
Pattern pattern = Pattern.compile("(?i)\\bSELECT\\s+1\\b");
Matcher matcher = pattern.matcher(sqlContent);
if (matcher.find()) {
return true;
}
pattern = Pattern.compile("(?i)\\bCREATE\\s+TABLE\\b");
matcher = pattern.matcher(sqlContent);
if (matcher.find()) {
pattern = Pattern.compile("(?i)\\bENGINE\\b.*\\bInnoDB\\b");
matcher = pattern.matcher(sqlContent);
if (matcher.find()) {
return true;
}
pattern = Pattern.compile("(?i)\\bPRIMARY\\s+KEY\\b");
matcher = pattern.matcher(sqlContent);
if (matcher.find()) {
return true;
}
}
pattern = Pattern.compile("(?i)\\bTRUNCATE\\s+TABLE\\b");
matcher = pattern.matcher(sqlContent);
if (matcher.find()) {
return true;
}
return false;
}
}
上述代码中,readSqlFile
方法用于从文件中读取SQL脚本,isOracle
和isMySQL
方法用于检查SQL脚本中是否包含特定的语法和关键字,以确定它是Oracle还是MySQL的。最后在main
方法中调用这些方法并打印结果。