excel 导出成 postgresl 简单的sql语句

161 阅读1分钟

功能描述

本文是解析execl,获取excel信息,然后写成 sql 建表命令的text文本,最后使用navicat直接导入即可; 本文主要是postgres的导入,其他数据库只需修改部分代码即可

使用hutool

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.5</version>
</dependency>

准备excel

image.png

代码

package com.example.ph_tools;

import cn.hutool.core.io.file.FileWriter;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import lombok.Data;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.util.List;

public class ExcelCreatePsqlTable {
    @Data
    public static class ExcelEntity{
        /** 字段名称 */
        private String 字段;
        /** 字段类型 */
        private String 类型;
        /** 字段注释 */
        private String 注释;
        /** 是否非空 */
        private boolean 非空;
        /** 是否主键 */
        private boolean 主键;
    }

    @Test
    void createTable(){
        // excel目录
        String excelUrl = "C:\test\建表.xlsx";
        //生成sql目录
        String destUrl = "C:\test\createTable.sql";
        //创建到指定模块
        String schema = ""public".";
        // 使用hutool的文件写入流工具写入
        FileWriter writer = new FileWriter(new File(destUrl));
        // 获取excel的多个sheet
        ExcelUtil.getReader(new File(excelUrl)).getSheetNames().forEach(e ->{
            // 读取指定sheet
            ExcelReader reader = ExcelUtil.getReader(excelUrl,e);
            //获取的表名
            String tableName = """+reader.readCellValue(0,0).toString().trim()+""";
            String nameAndPoint = tableName+".";
            //读取excel内容从第二行开始
            List<ExcelEntity> list = reader.read(1,1,ExcelEntity.class);
            // 记录备注
            StringBuffer comment = new StringBuffer();
            // 开始建表
            writer.append("CREATE TABLE "+tableName+"(\n");
            comment.append("COMMENT ON TABLE "+schema+tableName+" IS "+"'"+e+"';\n");
            // for循环获取多个字段信息
            for (int i = 0; i < list.size(); i++) {
                ExcelEntity bean = list.get(i);
                // 最后一个字段没有",",并加上");"
                if (i<list.size()-1){
                    writer.append("\t\t\t\t"+bean.字段+" "+bean.类型+(bean.主键?" PRIMARY KEY":"")+(bean.非空?" NOT NULL":"")+",\n");
                }else {
                    writer.append("\t\t\t\t"+bean.字段+" "+bean.类型+(bean.主键?" PRIMARY KEY":"")+(bean.非空?" NOT NULL":"")+");\n");
                }
                comment.append("COMMENT ON COLUMN "+schema+nameAndPoint+"""+bean.字段+"" IS '"+bean.注释+"';\n");
            }
            //建表命令完成,加上备注
            writer.append(comment.toString());
        });
    }
}

结果

生成的sql文件

image.png

sql文件直接拖动到navicat表中

image.png

image.png 到此成功!!!