Heim > Java > javaLernprogramm > Hauptteil

So importieren Sie Excel-Daten mit Java in eine Datenbank

王林
Freigeben: 2023-04-27 17:58:16
nach vorne
1467 Leute haben es durchsucht

1. Entwerfen Sie eine Datenbanktabelle basierend auf den Geschäftsanforderungen

So importieren Sie Excel-Daten mit Java in eine Datenbank

2. Entwerfen Sie eine Excel-Vorlage basierend auf einer Datenbanktabelle

Jedes Spaltenattribut der Vorlage muss eins zu eins mit den Tabellenfeldern übereinstimmen

So importieren Sie Excel-Daten mit Java in eine Datenbank

3. Umgebungsvorbereitung

Ich bin hier Die Projektumgebung basiert auf der monolithischen SpringBoot-Architektur, einem Unternehmens-Framework für die Persistenzschicht und integrierten verschiedenen Einzeltabellen-Betriebsmethoden basierend auf MyBatis-Plus.

Abhängigkeiten importieren

        <!--使用POI读取文件-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
Nach dem Login kopieren

4. Entitätsklassen entsprechend der Tabelle über Plug-ins generieren

/**
 * TbZbzs: 值班值守表
 * @author zs
 * @date 2021-12-17 08:46:31
 **/
@Data
@ApiModel(value="值班值守表,对应表tb_zbzs",description="适用于新增和修改页面传参")
public class TbZbzs extends ProBaseEntity<TbZbzs> {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value="id")
    private String id;		// id
    @ApiModelProperty(value="部门")
    private String bm;		// 部门
    @ApiModelProperty(value="值班上报")
    private String zbsb;		// 值班上报
    @ApiModelProperty(value="值班人员")
    private String zbry;		// 值班人员
    @ApiModelProperty(value="上报时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private java.util.Date sbsj;		// 上报时间
    @ApiModelProperty(value="结束时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private java.util.Date jssj;		// 结束时间
    @ApiModelProperty(value="联系方式")
    private String lxfs;		// 联系方式
    @ApiModelProperty(value="状态")
    private String zt;		// 状态
    /**
     * 逻辑删除
     */
    @ApiModelProperty(value="逻辑删除")
    private String delFlag;
    /**
     * 创建时间
     */
    @ApiModelProperty(value="创建时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
}
Nach dem Login kopieren

5. Schreibwerkzeugklassen anpassen

Hier wird eine grundlegende Vorlage bereitgestellt, und Konvertierungsbedingungen können entsprechend den Geschäftsanforderungen hinzugefügt werden

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
/**
 * 新增值班排班表导入Excel表工具类
 * zyw
 */
public class ImportExcelUtil {
    private final static String excel2003L =".xls";    //2003- 版本的excel
    private final static String excel2007U =".xlsx";   //2007+ 版本的excel
    /**
     * 描述:获取IO流中的数据,组装成List<List<Object>>对象
     * @param in,fileName
     * @return
     * @throws Exception
     */
    public static List<List<Object>> getListByExcel(InputStream in, String fileName) throws Exception {
        List<List<Object>> list = null;
        //创建Excel工作薄
        Workbook work = ImportExcelUtil.getWorkbook(in,fileName);
        if(null == work){
            throw new Exception("创建Excel工作薄为空!");
        }
        Sheet sheet = null;
        Row row = null;
        Cell cell = null;
        list = new ArrayList<List<Object>>();
        //遍历Excel中所有的sheet
        for (int i = 0; i < work.getNumberOfSheets(); i++) {
            sheet = work.getSheetAt(i);
            if(sheet==null){continue;}
            //遍历当前sheet中的所有行
            for (int j = sheet.getFirstRowNum(); j < sheet.getLastRowNum()+1; j++) {
                row = sheet.getRow(j);
                if(row==null||row.getFirstCellNum()==j){continue;}
                //遍历所有的列
                List<Object> li = new ArrayList<Object>();
                for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
                    cell = row.getCell(y);
                    li.add(ImportExcelUtil.getCellValue(cell));
                }
                list.add(li);
            }
        }
//        work.close();
        return list;
    }
    /**
     * 描述:根据文件后缀,自适应上传文件的版本
     * @param inStr,fileName
     * @return
     * @throws Exception
     */
    public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception{
        Workbook wb = null;
        String fileType = fileName.substring(fileName.lastIndexOf("."));
        if(excel2003L.equals(fileType)){
            wb = new HSSFWorkbook(inStr);  //2003-
        }else if(excel2007U.equals(fileType)){
            wb = new XSSFWorkbook(inStr);  //2007+
        }else{
            throw new Exception("解析的文件格式有误!");
        }
        return wb;
    }
    /**
     * 描述:对表格中数值进行格式化
     * @param cell
     * @return
     */
    public  static Object getCellValue(Cell cell){
        Object value = null;
        DecimalFormat df = new DecimalFormat("0");  //格式化number String字符
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");  //日期格式化
//        DecimalFormat df2 = new DecimalFormat("0.00");  //格式化数字
        if (cell!=null){
            switch (cell.getCellType()) {
                case Cell.CELL_TYPE_STRING:
                    value = cell.getRichStringCellValue().getString();
                    break;
                case Cell.CELL_TYPE_NUMERIC:
                    if("General".equals(cell.getCellStyle().getDataFormatString())){
                        value = df.format(cell.getNumericCellValue());
                    }
                    else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())){
                        value = sdf.format(cell.getDateCellValue());
                    }
                    else{
                        value = sdf.format(cell.getDateCellValue());
                    }
                    break;
                case Cell.CELL_TYPE_BOOLEAN:
                    value = cell.getBooleanCellValue();
                    break;
                case Cell.CELL_TYPE_BLANK:
                    value = "";
                    break;
                default:
                    break;
            }
        }
        return value;
    }
}
Nach dem Login kopieren

6. Schreiben Sie einen spezifischen Geschäftslogikdienst

Die Hauptidee: Analysieren Sie die Excel-Datei über die Tool-Klasse in eine Sammlung von Objektgenerika und durchlaufen Sie dann die Sammlung. Füllen Sie während des Durchlaufs jede Datenzeile in das Objekt Einmal und dann jedes Mal eine Schleife. Die zugewiesenen Objekte werden in einer Listensammlung gespeichert, und schließlich wird die Sammlung einheitlich in Stapeln hochgeladen und in der Datenbank gespeichert.

public Map<String,Object> importTprkxx(MultipartFile file){
        Map<String,Object> resultMap = new HashMap<>();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        List<TbZbzs> tbZbzsList = new ArrayList<>();
        try {
            //获取数据
            List<List<Object>> olist = ImportExcelUtil.getListByExcel(file.getInputStream(), file.getOriginalFilename());
            resultMap.put("导入成功",200);
            //封装数据
            for (int i = 0; i < olist.size(); i++) {
                List<Object> list = olist.get(i);
                if (list.get(0) == "" || ("序号").equals(list.get(0))) {
                    continue;
                }
                TbZbzs tbZbzs = new TbZbzs();
                tbZbzs.setId(UUID.randomUUID().toString().replace("-", "").substring(0, 20));
                //根据下标获取每一行的每一条数据
                if (String.valueOf(list.get(0))==null) {
                    resultMap.put("state", "部门不能为空");
                    continue;
                }
                tbZbzs.setBm(String.valueOf(list.get(0)));
                if (String.valueOf(list.get(1))==null) {
                    resultMap.put("state", "值班上报不能为空");
                    continue;
                }
                tbZbzs.setZbsb(String.valueOf(list.get(1)));
                if (String.valueOf(list.get(2))==null) {
                    resultMap.put("state", "值班人员不能为空");
                    continue;
                }
                tbZbzs.setZbry(String.valueOf(list.get(2)));
                if (String.valueOf(list.get(3))==null) {
                    resultMap.put("state", "导入失败,上报时间不能为空");
                    continue;
                }
                String dateStr3 = String.valueOf(list.get(3));
                Date date3 = simpleDateFormat.parse(dateStr3);
                tbZbzs.setSbsj(date3);
                if (String.valueOf(list.get(4))==null) {
                    resultMap.put("state", "导入失败,结束时间不能为空");
                    continue;
                }
                String dateStr4 = String.valueOf(list.get(4));
                Date date4 = simpleDateFormat.parse(dateStr4);
                tbZbzs.setJssj(date4);
                if (String.valueOf(list.get(5))==null) {
                    resultMap.put("state", "联系方式不能为空");
                    continue;
                }
                tbZbzs.setLxfs(String.valueOf(list.get(5)));
                if (String.valueOf(list.get(6))==null) {
                    resultMap.put("state", "状态不能为空");
                    continue;
                }
                tbZbzs.setZt(String.valueOf(list.get(6)));
                if (String.valueOf(list.get(7))==null) {
                    resultMap.put("state", "逻辑删除不能为空");
                    continue;
                }
                tbZbzs.setDelFlag(String.valueOf(list.get(7)));
                if (String.valueOf(list.get(8))==null) {
                    resultMap.put("state", "导入失败,创建时间不能为空");
                    continue;
                }
                String dateStr8 = String.valueOf(list.get(8));
                Date date8 = simpleDateFormat.parse(dateStr8);
                tbZbzs.setCreateDate(date8);
                tbZbzsList.add(tbZbzs);
            }
            int i = tbZbzsDao.insertTbZbzsList(tbZbzsList);
            if (i != 0) {
                resultMap.put("state", "导入成功");
            }else {
                resultMap.put("state", "导入失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            resultMap.put("state", "导入失败");
        }
        return resultMap;
    }
Nach dem Login kopieren

7. Schreiben Sie die Batch-Upload-Methode

<insert id="insertTbZbzsList"  parameterType="java.util.List">
        insert into tb_zbzs (
        id,
        bm,
        zbsb,
        zbry,
        sbsj,
        jssj,
        lxfs,
        zt,
        del_flag,
        create_date
        ) VALUES
        <foreach collection="list" item="item" separator=",">
            (
            #{item.id},
            #{item.bm},
            #{item.zbsb},
            #{item.zbry},
            #{item.sbsj},
            #{item.jssj},
            #{item.lxfs},
            #{item.zt},
            #{item.delFlag},
            #{item.createDate}
            )
        </foreach>
        </insert>
Nach dem Login kopieren

9. Testen Sie die Schnittstelle über Swagger

So importieren Sie Excel-Daten mit Java in eine Datenbank Konsole Sehen Sie sich den Importeffekt an

Das obige ist der detaillierte Inhalt vonSo importieren Sie Excel-Daten mit Java in eine Datenbank. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!