两种方式获取所有表名和字段名

绪论

可以通过两种方式,获取表名和字段名,来拼接我们想要的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)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值