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" 表示否

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值