绪论
可以通过两种方式,获取表名和字段名,来拼接我们想要的sql语句。
一、工具类
可以使用navicat导出一份sql,对该文件进行处理。
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* explain:sql文件解析
* Created by yang on 2019/6/28
*/
public class Test {
public static void main(String[] args) {
try {
FileReader reader = new FileReader("C:/Users/yang/Desktop/all.sql");
BufferedReader br = new BufferedReader(reader);
String line;
// 获取所有内容
String content = "";
while ((line = br.readLine()) != null) {
content += line;
}
// 对于多个空格替换成一个空格
Pattern p = Pattern.compile("\\s+");
Matcher m = p.matcher(content);
content = m.replaceAll(" ");
// 以分号分割字符串
String[] contents = content.split(";");
// 获取所有建表语句
List<String> tables = new ArrayList<>();
for (String s : contents) {
if (s.contains("CREATE TABLE")) {
tables.add(s);
}
}
List<String> result = new ArrayList<>();
// 用逗号分割表语句,第一句存在表名,最后一个无用
for (String s : tables) {
String[] s1 = s.split(", ");
String[] s2 = s1[0].split(" \\( ");
String tableName = s2[0].split(" ")[2].replace("`","");
result.add("表名:" + tableName);
// 创建一个集合存储所有列
List<String> columns = new ArrayList<>();
columns.add(s2[1].split(" ")[0].replace("`",""));
for (int i = 1; i < s1.length - 1; i++) {
columns.add(s1[i].split(" ")[0].replace("`",""));
}
String column = "";
for (int i = 0; i < columns.size(); i++) {
column += columns.get(i);
if (i + 1 < columns.size()) {
column += ",";
}
}
result.add("列集合:" + column);
result.add("-------------------------------------");
}
// 写入到文件中
File write = new File("C:/Users/yang/Desktop/writeSQL.txt");
write.createNewFile();
BufferedWriter out = new BufferedWriter(new FileWriter(write));
for (String s : result) {
// \r\n即为换行
out.write(s + "\r\n");
}
// 把缓存区内容写入文件
out.flush();
// 关闭文件
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
二、SQL查询
可以使用sql语句进行查询
SELECT
table_name 'name',
GROUP_CONCAT(COLUMN_NAME) 'column'
FROM
information_schema. COLUMNS
WHERE
table_name LIKE '%aaaaaa%'
GROUP BY
table_name;
(若有什么错误,请留言指正,3Q)