java 导出数据库表结构信息、列字段、约束等

文章介绍了一位开发工程师如何使用Java和JdbcTemplate从MySQL的information_schema获取表结构和约束信息,先将数据导出为json格式,然后通过在线工具转换为Excel,以便于项目文档的编写。
摘要由CSDN通过智能技术生成

👑 博主简介:知名开发工程师
👣 出没地点:北京
💊 2023年目标:成为一个大佬
———————————————————————————————————————————
版权声明:本文为原创文章,如需转载须注明出处,喜欢可收藏!

一. 前言

由于编写项目相关文档,需要导出开发库所有的表结构信息,因此写了个程序,首先导出json格式,然后将json转成excel

@RestController
public class UserController {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @GetMapping("/hello")
    public String hello() {

        //查到所有表,列的信息
        List<Map<String, Object>> list1 = jdbcTemplate.queryForList("SELECT\n" +
                "\tt1.table_name,t1.column_name,t1.column_type,t1.column_comment\n" +
                "FROM\n" +
                "\tinformation_schema.`COLUMNS` t1\n" +
                "WHERE\n" +
                "\tt1.table_schema = 'dtmg' \n" +
                "\tAND t1.table_name LIKE 'di%' \n" +
                "\t\n" +
                "union all \n" +
                "\n" +
                "SELECT\n" +
                "\tt1.table_name,t1.column_name,t1.column_type,t1.column_comment\n" +
                "FROM\n" +
                "\tinformation_schema.`COLUMNS` t1\n" +
                "WHERE\n" +
                "\tt1.table_schema = 'dtmg' \n" +
                "\tAND t1.table_name LIKE 'sys%'");

        System.out.println(list1.size());


        //查询所有的有约束的表,列,约束名
        List<Map<String, Object>> list2 = jdbcTemplate.queryForList("SELECT\n" +
                "\ttable_name,\n" +
                "\tcolumn_name,\n" +
                "\tconstraint_name \n" +
                "FROM\n" +
                "\tinformation_schema.KEY_COLUMN_USAGE \n" +
                "WHERE\n" +
                "\ttable_schema = 'dtmg' \n" +
                "\tAND table_name LIKE 'di%'\n" +
                "union all \n" +
                "SELECT\n" +
                "\ttable_name,\n" +
                "\tcolumn_name,\n" +
                "\tconstraint_name \n" +
                "FROM\n" +
                "\tinformation_schema.KEY_COLUMN_USAGE \n" +
                "WHERE\n" +
                "\ttable_schema = 'dtmg' \n" +
                "\tAND table_name LIKE 'sys%'");

        System.out.println(list2.size());

        for (Map<String, Object> item : list1) {
            for (Map<String, Object> son : list2) {
                if ((item.get("table_name")+""+item.get("column_name")).equals(son.get("table_name")+""+son.get("column_name"))){
                    item.put("constraint_name",son.get("constraint_name"));
                }
            }
        }


        List<Map<String, Object>> list3 = jdbcTemplate.queryForList("select table_name,table_comment from information_schema.`TABLES`\n" +
                "where \n" +
                "table_schema = 'dtmg' \n" +
                "\tAND table_name LIKE 'di%' \n" +
                "\tOR table_name LIKE 'sys%' ");

        for (Map<String, Object> x : list1) {
            for (Map<String, Object> y : list3) {
                if (x.get("table_name").equals(y.get("table_name"))){
                    x.put("table_comment",y.get("table_comment"));
                }
            }
        }

        String str = JSON.toJSONString(list1);
        System.out.println();

        this.write(str);


        return "ok";
    }

    public void write(String str){
        BufferedWriter writer = null;
        File file = new File("E://aa.json");
        //如果文件不存在则新建
        if (!file.exists()){
            try {
                file.createNewFile();
            }catch (IOException e){
               e.printStackTrace();
            }
        }
        //如果多次执行同一个流程,会导致json文件内容不断追加,在写入之前清空文件
        try {
            writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file,false),"UTF-8"));
            writer.write("");
            writer.write(str);
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try{
                if (writer != null){
                    writer.close();
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

}

二. 结果

运行程序,生成 json 文件
在这里插入图片描述
然后借助网上一个在线工具,jsonexcel : 在线工具

转成excel后如图:
在这里插入图片描述

### 回答1: 要将MySQL结构导出为Excel,你可以按照以下步骤进行: 1. 使用MySQL命令行工具或可视化工具,连接到你的MySQL数据库。 2. 运行SHOW TABLES;语句,以获取数据库中所有。 3. 针对每个,运行SHOW CREATE TABLE table_name;语句,以获取的创建语句。将结果复制到一个文本编辑器中,以备后用。 4. 打开Microsoft Excel(或任何其他支持Excel格式的电子格应用程序)。 5. 在第一个工作中,将名称和结构导入。你可以使用格来组织这些信息,其中每个的名称位于第一个单元格,结构名和数据类型位于第二行开始的单元格。 6. 在第二个工作中,将每个信息导入。你可以使用格来组织这些信息,其中每个名和相关属性位于第一行开始的单元格。 7. 将第一个工作和第二个工作保存为Excel文件。 通过按照上述步骤操作,你可以将MySQL结构导出为Excel文件。这样,你就可以轻松地查看和共享结构信息了。 ### 回答2: 要将 MySQL 结构导出为 Excel 文件,可以采用以下步骤: 1. 使用 MySQL 的 "DESCRIBE" 命令或 "SHOW COLUMNS" 命令,查询结构信息。例如,可以执行以下 SQL 语句获取 "table_name" 的结构信息: ```sql DESCRIBE table_name; ``` 或者 ```sql SHOW COLUMNS FROM table_name; ``` 2. 将查询结果保存为文本文件,例如 "table_structure.txt"。 3. 使用编程语言(如 Python、Java 等)读取文本文件中的数据,并将数据写入到 Excel 文件中。常用的库包括 openpyxl、XlsxWriter、Pandas 等。以下是使用 Python 的 openpyxl 库的示例代码: ```python from openpyxl import Workbook # 创建一个新的 Excel 文档 workbook = Workbook() sheet = workbook.active # 读取结构信息的文本文件 with open('table_structure.txt', 'r') as f: lines = f.readlines() # 逐行写入 Excel 文件 for i, line in enumerate(lines): columns = line.strip().split('\t') # 假设每一行的字段以制符分隔 for j, column in enumerate(columns): sheet.cell(row=i+1, column=j+1).value = column workbook.save('table_structure.xlsx') # 保存 Excel 文件 ``` 4. 运行以上代码后,会生成一个名为 "table_structure.xlsx" 的 Excel 文件,其中包含了 MySQL 结构信息。 需要注意的是,导出的 Excel 文件中可能不包含部分特殊字符或格式,例如注释、默认值等。因此,在实际应用中,可能需要根据具体需求进行进一步的处理和调整。 ### 回答3: 要将MySQL结构导出为Excel,可以按照以下步骤进行操作: 第一步,使用数据库管理工具,例如Navicat for MySQL或phpMyAdmin等,连接到MySQL数据库。 第二步,选择要导出结构数据库,然后选择要导出结构的数据。 第三步,右键点击选择的,然后选择“导出”选项。 第四步,在导出设置中,选择导出格式为CSV或Excel(XLS或XLSX)。 第五步,选择导出路径和文件名,点击“导出”按钮。 第六步,等待导出过程完成。 通过以上步骤,可以将MySQL结构导出为Excel文件。这样导出的Excel文件中将包含的所有字段名称、数据类型、约束条件等结构信息。 另外,如果只需要导出名而不需要其他结构信息,可以通过编写SQL语句查询数据库的information_schema来获取名,然后将结果导出到Excel文件中。例如,可以使用以下SQL语句查询名: SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '数据库名' AND TABLE_NAME = '名'; 然后将查询结果复制到Excel文件中即可。这种方法更加简单,适用于只需要导出名的情况。 总结起来,通过数据库管理工具导出整个结构信息,或者通过编写SQL语句查询名,然后将结果导出到Excel文件中,都可以实现将MySQL结构导出为Excel的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北京李嘉城

我的好兄弟啊,感谢大佬的火箭!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值