mysql 表结构转excel表格

 

最近需要写文档,由于开发模式是先开发后写文档(不想吐槽。。。),数据库表结构什么的都搞好了,然后写文档的时候需要贴表结构,什么字段,类型,相关说明需要一一对应起来,数据库表10多张,字段又多,手动复制粘贴太蛋疼了,于是就写了个将表结构转excel表格的简单实现(丑是丑了点,毕竟实现功能了不是)。

package net.cloudkit.management.util;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
import java.sql.*;

import java.util.*;

/**
 * @author : gongtao
 * @version : 2017/9/6
 */
public class TableToExcel {

    private String tableName = "";//表名
    private String[] colNames; // 列名数组
    private String[] colComment; // 列名数组
    private String[] colTypes; //列名类型数组
    private int[] colSizes; //列名大小数组
    //数据库连接
    private static final String URL ="jdbc:mysql://192.168.1.101:3306/management?useUnicode=true&characterEncoding=UTF-8";
    private static final String NAME = "root";
    private static final String PASS = "admin123";
    private static final String DRIVER ="com.mysql.jdbc.Driver";

    public void genEntitySomeTable(List<String> tableNames){
        for(int p=0;p<tableNames.size();p++){
            tableName=tableNames.get(p);
            //创建连接
            Connection con = null;
            //查要生成实体类的表
            String sql = "select * from " + tableName;
            String sql2 = "show full fields from " + tableName;
            PreparedStatement pStemt = null;
            PreparedStatement pStemt2 = null;
            try {
                try {
                    Class.forName(DRIVER);
                } catch (ClassNotFoundException e1) {
                    e1.printStackTrace();
                }
                con = DriverManager.getConnection(URL,NAME,PASS);
                pStemt = con.prepareStatement(sql);
                ResultSetMetaData rsmd = pStemt.getMetaData();
                pStemt2 = con.prepareStatement(sql2);
                ResultSet rsResultSet=pStemt2.executeQuery();
                int size = rsmd.getColumnCount();    //统计列
                colNames = new String[size];
                colTypes = new String[size];
                colSizes = new int[size];
                colComment = new String[size];
                int j=0;
                while (rsResultSet.next()) {
                    //System.out.println(rsResultSet.getObject(9));
                    colComment[j]=rsResultSet.getObject(9).toString();
                    j++;
                }
                for (int i = 0; i < size; i++) {
                    colNames[i] = rsmd.getColumnName(i + 1);
                    colTypes[i] = rsmd.getColumnTypeName(i + 1);
                    if (colTypes[i] .equals("INT")){
                        colTypes[i] = "INTEGER";
                    }
                    colSizes[i] = rsmd.getColumnDisplaySize(i + 1);
                }

                createExcel();

            } catch (Exception e) {
                e.printStackTrace();
            } finally{
                try {
                    if (con != null){
                        con.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println("生成完毕!");
    }


    public void createExcel() throws Exception{
        //获取Excel模版文件目录
        String path = "D:/template.xlsx";
        path = path.replaceAll("%20", " ");
        try(InputStream fileInputStream = new FileInputStream(path);
            //通过Excel模板目录获取Excel模版文件
            XSSFWorkbook workbook1 = new XSSFWorkbook(OPCPackage.open(fileInputStream));
            //利用POI3.8及其以上,每个Sheet可以存1,048,576行数据,每行可以有16,384列数据
            Workbook workbook = new SXSSFWorkbook(workbook1, 100)){
            //重命名sheet工作表名称:第几个工作表
            workbook.setSheetName(0, tableName);
            //创建sheet工作表
            SXSSFSheet sheet = (SXSSFSheet) workbook.getSheetAt(0);
            //从模板sheet工作表第几行开始插入(注意行、列、单元格都是从0开始数)
            int startRow = 1;
            for (int i = 0;i<colSizes.length;i++){
                Row row = sheet.createRow(startRow++);
                row.createCell(1).setCellValue(colNames[i]);
                row.createCell(2).setCellValue(colTypes[i] + "(" + colSizes[i] + ")");
                row.createCell(3).setCellValue(colComment[i]);
            }
            try(ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
                workbook.write(outputStream);
                //输出目录
                String filePath = "D:/" + tableName + ".xlsx";
                File file = new File(filePath);
                try(FileOutputStream fileOutputStream = new FileOutputStream(file);
                    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(outputStream.toByteArray())) {
                    byte[] bytes = new byte[1024];
                    int len;
                    while ((len = byteArrayInputStream.read(bytes)) != -1){
                        fileOutputStream.write(bytes,0,len);
                    }
                }
            }
        }
    }

    public static void main(String[] args) {
        TableToExcel tableToExcel = new TableToExcel();
        List<String> dataList = new ArrayList<>();
        //添加表名
        dataList.add("operation_log");
        tableToExcel.genEntitySomeTable(dataList);
    }

}

数据库表结构:

CREATE TABLE `operation_log` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `DATA_ID` bigint(20) DEFAULT NULL COMMENT '操作数据ID',
  `TABLE_NAME` varchar(64) DEFAULT NULL COMMENT '对应表名',
  `MODULE_NAME` varchar(64) DEFAULT NULL COMMENT '模块名称',
  `OPERATION` varchar(64) DEFAULT NULL COMMENT '具体操作',
  `TYPE` int(11) DEFAULT NULL COMMENT '类型:1、INFO 2、DEBUG 3、ERROR',
  `MESSAGE` varchar(5120) DEFAULT NULL COMMENT '信息',
  `OPERATION_USER` varchar(32) DEFAULT NULL COMMENT '操作人',
  `ROW_STATUS` int(8) DEFAULT NULL COMMENT '记录状态',
  `MODIFY_TIME` bigint(20) DEFAULT NULL COMMENT '修改时间',
  `CREATE_TIME` bigint(20) DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT '操作日志表';

 

模板excel:

生成的excel:

 

转载于:https://www.cnblogs.com/suiyueqiannian/p/7488713.html

### 回答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、付费专栏及课程。

余额充值