Java 导出MySql表结构信息到Excel

实现如下:

        public static void main(String[] args) {
            // 定义连接数据库所需的 URL、用户名和密码
            String url = "jdbc:mysql://xxx.xx.xx:3306/databases";
            String user = "root";
            String password = "root";

            //  加载 MySQL JDBC 驱动程序
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

            // 使用 JDBC 连接到数据库
            try (Connection connection = DriverManager.getConnection(url, user, password)) {

                // 获取数据库元数据信息
                DatabaseMetaData metaData = connection.getMetaData();
                String catalog = connection.getCatalog();

                // 存储表名和表描述
                List<String> tableNames = new ArrayList<>();
                List<String> tableRemarks = new ArrayList<>();

                // 获取数据库中的所有表
                ResultSet tables = metaData.getTables(catalog, null, null, new String[]{"TABLE"});

                // 遍历 tables 结果集,获取表名和表描述
                while (tables.next()) {
                    String tableName = tables.getString("TABLE_NAME");
                    String tableRemark = tables.getString("REMARKS");
                    tableNames.add(tableName);
                    tableRemarks.add(tableRemark);
                }

                // 创建新的 Excel 文件和一个 "xxxx" 的工作表
                XSSFWorkbook workbook = new XSSFWorkbook();
                XSSFSheet sheet = workbook.createSheet("xxxx");

                int rowNum = 0;
                int i = 0;
                for (String tableName : tableNames) {
                    // 每个表结构的表头
                    Row headerRow = sheet.createRow(rowNum++);
                    headerRow.createCell(0).setCellValue("表名");
                    headerRow.createCell(1).setCellValue("表描述");
                    headerRow.createCell(2).setCellValue("列名");
                    headerRow.createCell(3).setCellValue("数据类型");
                    headerRow.createCell(4).setCellValue("非空");
                    headerRow.createCell(5).setCellValue("自增");
                    headerRow.createCell(6).setCellValue("默认");
                    headerRow.createCell(7).setCellValue("注释");
                    Row tableRow = sheet.createRow(rowNum++);
                    tableRow.createCell(0).setCellValue(tableName);
                    tableRow.createCell(1).setCellValue(tableRemarks.get(i++));

                    // 该表的所有字段结构
                    ResultSet columns = metaData.getColumns(catalog, null, tableName, null);

                    while (columns.next()) {
                        String columnName = columns.getString("COLUMN_NAME");
                        String columnType = columns.getString("TYPE_NAME");
                        String columnSize = columns.getString("COLUMN_SIZE");
                        boolean isNullable = (columns.getInt("NULLABLE") == 0);
                        boolean isAutoIncrement = columns.getString("IS_AUTOINCREMENT").equals("YES");
                        String defaultValue = columns.getString("COLUMN_DEF");
                        String remarks = columns.getString("REMARKS");
                        Row columnRow = sheet.createRow(rowNum++);
                        columnRow.createCell(2).setCellValue(columnName);
                        columnRow.createCell(3).setCellValue(columnType+"("+columnSize+")");
                        columnRow.createCell(4).setCellValue(isNullable);
                        columnRow.createCell(5).setCellValue(isAutoIncrement);
                        columnRow.createCell(6).setCellValue(defaultValue);
                        columnRow.createCell(7).setCellValue(remarks);
                    }
                    columns.close();
                    sheet.createRow(rowNum++);
                    sheet.createRow(rowNum++);
                    sheet.createRow(rowNum++);
                }

                // 写入Excel文件
                try (FileOutputStream outputStream = new FileOutputStream("xxxx.xlsx")) {
                    workbook.write(outputStream);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

可以根据自己需求调整 结果集 ResultSet.getString()中的参数获取所需表参数、列参数;参考如下:

表信息 
列名
TABLE_CAT ------- 表所属的类别
TABLE_SCHEM ------- 表所属的模式 
TABLE_NAME ------- 表的名称
TABLE_TYPE ------- 表的类型
REMARKS ------- 表的注释或描述信息
TYPE_CAT ------- 此列保存类型的类别
TYPE_SCHEM ------- 此列保存类型的模式
TYPE_NAME ------- 此列保存类型的名称
SELF_REFERENCING_COL_NAME ------- 此列包含主键表中的列名称
REF_GENERATION ------- 指定如何生成 SELF_REFERENCING_COL_NAME 的值

列信息 
列名
TABLE_CAT ------- 列所属的类别
TABLE_SCHEM ------- 列所属的模式
TABLE_NAME ------- 列所属的表名
COLUMN_NAME ------- 列的名称
DATA_TYPE ------- 列的 SQL 类型
TYPE_NAME ------- 列的 SQL 类型名称
COLUMN_SIZE ------- 列的大小
DECIMAL_DIGITS ------- 小数部分的位数
NUM_PREC_RADIX ------- 基数
NULLABLE ------- 是否允许为 NULL。0 表示不允许,1 表示允许,2 表示不确定
REMARKS ------- 描述信息
COLUMN_DEF ------- 默认值
SQL_DATA_TYPE ------- 不同数据库的类型值
SQL_DATETIME_SUB ------- datetime 或其子类型的整数值
ORDINAL_POSITION ------- 索引位置
IS_NULLABLE ------- 否允许为 NULL 的字符串。YES" 表示允许,"NO" 表示不允许
IS_AUTOINCREMENT ------- 是否自增。"YES" 表示是,"NO" 表示否
IS_GENERATEDCOLUMN ------- 是否是生成的列的字符串。"YES" 表示是,"NO" 表示否

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值