国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SpringBoot】自定義工具類實現(xiàn)Excel數(shù)據(jù)新建表存入MySQL數(shù)據(jù)庫

這篇具有很好參考價值的文章主要介紹了【SpringBoot】自定義工具類實現(xiàn)Excel數(shù)據(jù)新建表存入MySQL數(shù)據(jù)庫。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【SpringBoot】自定義工具類實現(xiàn)Excel數(shù)據(jù)新建表存入MySQL數(shù)據(jù)庫,實戰(zhàn)筆記,數(shù)據(jù)庫,spring boot,excel,mysql,EasyExcel,后端,java

??浩澤學(xué)編程:個人主頁

??? 推薦專欄:《深入淺出SpringBoot》《java對AI的調(diào)用開發(fā)》
??????????????《RabbitMQ》《Spring》《SpringMVC》《項目實戰(zhàn)》
??學(xué)無止境,不驕不躁,知行合一

前言

本文主要介紹使用EasyExcel讀取Excel內(nèi)數(shù)據(jù)并轉(zhuǎn)換為csv格式數(shù)據(jù)(String字符串),然后實現(xiàn)字符串分割,分割出屬性名和屬性值建表插入MySQL數(shù)據(jù)庫中。


一、EasyExcel轉(zhuǎn)CSV

使用EasyExcel讀取Excel文件,轉(zhuǎn)換為csv數(shù)據(jù),也就是轉(zhuǎn)化為一個字符串。

工具類:

/**
 * @Version: 1.0.0
 * @Author: Dragon_王
 * @ClassName: ExcelUtils
 * @Description: Excel相關(guān)工具類
 * @Date: 2024/3/9 11:24
 */

import cn.hutool.core.collection.CollUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * Excel 相關(guān)工具類
 */
@Slf4j
public class ExcelUtils {

    /**
     * excel 轉(zhuǎn) csv
     *
     * @param multipartFile
     * @return
     */
    public static String excelToCsv(MultipartFile multipartFile) {
        // 讀取數(shù)據(jù)
        List<Map<Integer, String>> list = null;
        try {
            list = EasyExcel.read(multipartFile.getInputStream()).excelType(ExcelTypeEnum.XLSX).sheet().headRowNumber(0).doReadSync();
        } catch (IOException e) {
            log.error("表格處理錯誤", e);
        }
        if (CollUtil.isEmpty(list)) {
            return "";
        }
        // 轉(zhuǎn)換為 csv
        StringBuilder stringBuilder = new StringBuilder();
        // 讀取表頭
        LinkedHashMap<Integer, String> headerMap = (LinkedHashMap) list.get(0);
        List<String> headerList = headerMap.values().stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList());
        stringBuilder.append(StringUtils.join(headerList, ",")).append("\n");
        // 讀取數(shù)據(jù)
        for (int i = 1; i < list.size(); i++) {
            LinkedHashMap<Integer, String> dataMap = (LinkedHashMap) list.get(i);
            List<String> dataList = dataMap.values().stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList());
            stringBuilder.append(StringUtils.join(dataList, ",")).append("\n");
        }
        return stringBuilder.toString();
    }
}

實際運用中,只需要如下調(diào)用:

//傳入的是Excel文件,不是路徑哦
ExcelUtils.excelToCsv(Excel文件);

Excel文件格式如下:
【SpringBoot】自定義工具類實現(xiàn)Excel數(shù)據(jù)新建表存入MySQL數(shù)據(jù)庫,實戰(zhàn)筆記,數(shù)據(jù)庫,spring boot,excel,mysql,EasyExcel,后端,java

讀取的數(shù)據(jù)如下格式(這里我用加號拼接更清晰,實際上就是一個包含換行符的字符串,并不包含+號):

				"日期,閱讀量\n" +
                "3,253\n" +
                "4,408\n" +
                "5,363\n" +
                "6,955\n" +
                "7,496\n" +
                "8,1310\n" +
                "9,748";

二、分割建表入庫

  • 將獲取的csv數(shù)據(jù),其實這里就是一個String字符串,記住現(xiàn)在是字符串不是數(shù)組。
  • 首先我們分析一下,如何從字符串從分割出屬性名(日期、閱讀量)以及插入表中的每行屬性值(3 253;4 408…):
    • 找出第一個換行符(\n)的位置index,然后從第一位切割到index,這時候就得到屬性名的字符串。再以英文逗號為分割符進行分割,得到屬性名數(shù)組。
    • 從index切割到字符串最后的位置就是全部屬性值,那么如何分割得到每行的屬性值呢?同樣以換行符為分割符進行分割得到每行屬性值的數(shù)組。(這里注意一下,數(shù)組中的每個元素是一個包含一行值的字符串,如:“3,253”)
    • 分割得到的屬性值數(shù)組內(nèi)的每個元素再以英文逗號為分割符進行分割得到每行屬性值,如"3"和"253"
    • 最后根據(jù)屬性名和屬性值動態(tài)構(gòu)建sql語句進行創(chuàng)建表,插入值的操作。

分割csv數(shù)據(jù)并調(diào)用自定義建表和插入函數(shù):

		//定義表名
        String tableName = "test";
        //獲取第一個換行符的索引
        int index = csvData.indexOf("\n");
		//分割出屬性名字符串,如"日期,閱讀量"
        String colum = csvData.substring(0,index);
        //得到屬性名數(shù)組,如{"日期","閱讀量"}
        String[] colums = colum.split(",");
        //得到全部屬性值字符串,如"3,253\n4,408\n5,363\n6,955\n7,496\n8,1310\n9,748"
        String data = csvData.substring(index).trim();
        //得到全部屬性值數(shù)組,如:{"3,253","4,408","5,363""6,955".......}
        String[] split_data = data.split("\n");
    	//調(diào)用建表
        tableCreationUtils.createTable(tableName,colums);
        //調(diào)用插入
        tableCreationUtils.Dynamicinsert(tableName,colums,split_data);

動態(tài)構(gòu)造建表sql和插入sql工具類:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.sql.SQLException;


/**
 * 構(gòu)建生成表sql
 *
 * @version 1.0.0
 * @Author: dragon_王
 * @Date: 2024/3/11 20:45:16
 */
@Component
public class TableCreationUtils {

    private final JdbcTemplate jdbcTemplate;
    @Autowired
    public TableCreationUtils(DataSource dataSource){
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    /**
     * 動態(tài)構(gòu)建創(chuàng)建表的sql語句并執(zhí)行
     *
     * @param tableName 表名字符串
     * @param columnNames 屬性名數(shù)組
     * @return: void
     * @Date: 2024-03-13 23:23:36
     */
    public  void createTable(String tableName, String[] columnNames) {
        String sql = "CREATE TABLE " + tableName + " (";
        for (int i = 0; i < columnNames.length; i++) {
            sql += columnNames[i] + " VARCHAR(255)";
            if (i < columnNames.length - 1) {
                sql += ", ";
            }
        }
        sql += ");";
        jdbcTemplate.execute(sql);
    }

    /**
     * 動態(tài)構(gòu)建插入sql語句并執(zhí)行
     *
     * @param tableName 表名字符串
     * @param columnName 屬性名數(shù)組,如{"日期","閱讀"}
     * @param rowData 屬性值數(shù)組,如{"3,253","4,408","5,363""6,955".......}
     * @return: void
     * @Date: 2024-03-13 23:24:09
     */
    public void Dynamicinsert(String tableName, String[] columnName,String[] rowData) throws SQLException {
        //屬性值為空就拋出異常
        if (rowData == null || rowData.length == 0) {
            throw new IllegalArgumentException("Row data must not be null or empty");
        }

        for (int i = 0;i < rowData.length;i++){
            //傳進來的是所有屬性值數(shù)組,如:{"3,253","4,408","5,363""6,955".......}
            //所以以將每個元素取出以英文逗號分割,得到插入的每行元素如["3","253"]
            String[] row = rowData[i].split(",");
            // 構(gòu)建占位符
            StringBuilder columnNames = new StringBuilder();
            StringBuilder placeholders = new StringBuilder();
            for (int j = 0; j < row.length; j++) {
                if (j > 0) {
                    columnNames.append(", ");
                    placeholders.append(", ");
                }
                columnNames.append(columnName[j]);
                placeholders.append("?"); // 使用?作為PreparedStatement的占位符
            }

            // 構(gòu)建完整的SQL語句
            String sql = "INSERT INTO " + tableName + " (" + columnNames + ") VALUES (" + placeholders + ")";

            // 使用JdbcTemplate執(zhí)行插入操作,如第一次循環(huán):insert into tablename (日期,閱讀) values (?,?)
            //row:["3","253"]
            jdbcTemplate.update(sql,row);
        }
    }

}

上面代碼有以上面EXcel數(shù)據(jù)為例子的詳細講解,我就不再贅訴,很簡單的思路。


總結(jié)

以上就是使用EasyExcel讀取Excel內(nèi)數(shù)據(jù)并轉(zhuǎn)換為csv格式數(shù)據(jù)(String字符串),然后實現(xiàn)字符串分割,分割出屬性名和屬性值建表插入MySQL數(shù)據(jù)庫中的詳細講解。文章來源地址http://www.zghlxwxcb.cn/news/detail-840214.html

到了這里,關(guān)于【SpringBoot】自定義工具類實現(xiàn)Excel數(shù)據(jù)新建表存入MySQL數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Java解析Excel文件并把數(shù)據(jù)存入數(shù)據(jù)庫

    使用SpingMVC和hibernate框架實現(xiàn) web.xml中的配置文件就按照這種方式寫,只需要把\\\"application.xml\\\"換成你的配置文件名即可 在這個配置文件中你還可以規(guī)定上傳文件的格式以及大小等多種屬性限制 注意: 1.enctype=“multipart/form-data” 必須寫,封裝表單 2.method=“post”,提交方式必須

    2024年01月23日
    瀏覽(25)
  • Python批處理(一)提取txt中數(shù)據(jù)存入excel

    Python批處理(一)提取txt中數(shù)據(jù)存入excel

    現(xiàn)從冠層分析軟件中保存了葉面積指數(shù)分析的結(jié)果,然而軟件保存格式為txt,且在不同的文件夾中,每個文件夾的txt文件數(shù)量不固定,但是txt文件格式固定?,F(xiàn)需要批量處理這些txt文件,獲取頭三行的數(shù)據(jù),并存入excel中。 1、file = open(file_name, ‘r’)。使用open()函數(shù)打開名為

    2024年02月09日
    瀏覽(25)
  • chatgpt賦能python:Python如何將數(shù)據(jù)存入Excel中?

    Python作為一門高級編程語言,廣泛應(yīng)用于數(shù)據(jù)處理和分析。在數(shù)據(jù)分析過程中,Excel作為常用的電子表格軟件扮演著重要的角色。如果能將Python處理后的數(shù)據(jù)保存為Excel文件,將會讓數(shù)據(jù)分析過程更加高效便捷。下面我們就來看一下Python如何將數(shù)據(jù)存入Excel中。 pandas是Python中常

    2024年02月08日
    瀏覽(23)
  • 【辦公自動化】在Excel中按條件篩選數(shù)據(jù)并存入新的表

    【辦公自動化】在Excel中按條件篩選數(shù)據(jù)并存入新的表

    ? ???♂? 個人主頁:@艾派森的個人主頁 ???作者簡介:Python學(xué)習(xí)者 ?? 希望大家多多支持,我們一起進步!?? 如果文章對你有幫助的話, 歡迎評論 ??點贊???? 收藏 ??加關(guān)注+ 目錄 一、Python處理Excel 二、在Excel中按條件篩選數(shù)據(jù)并存入新的表 三、往期推薦 四、文末

    2024年02月07日
    瀏覽(19)
  • vuex存儲數(shù)組(新建,增,刪,更新),并存入localstorage定時刪除

    vuex存儲數(shù)組(新建,增,刪,更新),并存入localstorage定時刪除

    使用背景 初始化一個完整數(shù)組,但在業(yè)務(wù)邏輯中會單獨更新或增刪其中的一部分或全部。 如果每次都是全部更新,直接使用set替換即可,但大部分數(shù)組不變只修改個別數(shù)據(jù),直接替換的代價較大,因此維護一個增刪改的業(yè)務(wù)。 原來的數(shù)據(jù)都是有意義的,新數(shù)據(jù)可能是初始化

    2023年04月26日
    瀏覽(15)
  • Python 將CSV文件數(shù)據(jù)存入Mysql數(shù)據(jù)庫

    Python 將CSV文件數(shù)據(jù)存入Mysql數(shù)據(jù)庫

    我們有一個名為student.csv的文件,里面包含有學(xué)生的學(xué)號、姓名、性別等信息,想要基于Python將CSV文件中的信息寫入MySQL數(shù)據(jù)庫的student_info表中。 下面給出具體實現(xiàn)代碼。 首先引入所需要的庫。 1、get_data函數(shù)打開文件csv文件, 通過open方法打開文件(python文件實現(xiàn)了迭代器協(xié)

    2024年02月11日
    瀏覽(14)
  • 64位WIN11安裝MYSQL、ODBC鏈接工具并進行EXCEL數(shù)據(jù)連接

    64位WIN11安裝MYSQL、ODBC鏈接工具并進行EXCEL數(shù)據(jù)連接

    目的 :安裝MYSQL + MYSQL WORKBENTCH + MYSQL ODBC,并將外部.sql腳本文件內(nèi)容通過MYSQL WORKBENTCH導(dǎo)入數(shù)據(jù)庫,然后利用MYSQL ODBC將此內(nèi)容導(dǎo)入EXCEL。 過程 :分為4個大的步驟,需要三個安裝包,我放在網(wǎng)盤里鏈接:https://pan.baidu.com/s/1-oj9AUonumdQrPse3FrSpw 提取碼:lyky 一、 安裝MYSQL(數(shù)據(jù)庫) 二

    2024年02月04日
    瀏覽(15)
  • Springboot配置Log4j日志系統(tǒng),并將日志存入數(shù)據(jù)庫

    Springboot配置Log4j日志系統(tǒng),并將日志存入數(shù)據(jù)庫

    Log4j是apache公司開發(fā)的一款日志管理系統(tǒng),可以高效的管理系統(tǒng)中出現(xiàn)的BUG或者各種信息,并且可以已文本的方式或者數(shù)據(jù)庫存入的方式來記錄數(shù)據(jù) 在pom.xml中導(dǎo)入Log4j依賴 在Resources文件夾下創(chuàng)建一個log4j.properties文件 編寫配置文件 這是個測試類 可以看見,控制臺和數(shù)據(jù)庫表

    2024年02月08日
    瀏覽(95)
  • python 批量將圖片存入excel單元格內(nèi)

    https://blog.csdn.net/wuyoudeyuer/article/details/128185284 以下是一個示例程序,可以實現(xiàn)將指定目錄下的所有圖片存儲到Excel單元格內(nèi)。注意需要安裝openpyxl庫和Pillow庫。 以上代碼會將指定目錄下所有的.jpg或.png文件存儲到Excel單元格中,并將單元格大小調(diào)整為適應(yīng)圖片大小。需要注意的

    2024年01月21日
    瀏覽(19)
  • SpringBoot整合Easyexcel實現(xiàn)將數(shù)據(jù)導(dǎo)出為Excel表格的功能

    SpringBoot整合Easyexcel實現(xiàn)將數(shù)據(jù)導(dǎo)出為Excel表格的功能

    本文主要介紹基于SpringBoot +MyBatis-Plus+Easyexcel+Vue實現(xiàn)缺陷跟蹤系統(tǒng)中導(dǎo)出缺陷數(shù)據(jù)的功能,實現(xiàn)效果如下圖: EasyExcel是一個基于Java的、快速、簡潔、解決大文件內(nèi)存溢出的Excel處理工具。他能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成Excel的讀、寫等功能。 本文

    2024年02月14日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包