這篇文章主要介紹“Java怎么將Excel數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“Java怎么將Excel數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫”文章能幫助大家解決問題。
成都創(chuàng)新互聯(lián)公司專注于赤峰林西網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供赤峰林西營銷型網(wǎng)站建設(shè),赤峰林西網(wǎng)站制作、赤峰林西網(wǎng)頁設(shè)計(jì)、赤峰林西網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造赤峰林西網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供赤峰林西網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
模板的每列屬性必須與表字段一一對(duì)應(yīng)
我這里項(xiàng)目環(huán)境是基于SpringBoot單體式架構(gòu),持久層用的公司框架,內(nèi)置了基于MyBatis-Plus的各種單表操作的方法。
導(dǎo)入依賴
org.apache.poi poi 3.17 org.apache.poi poi-ooxml 3.17
/** * TbZbzs: 值班值守表 * @author zs * @date 2021-12-17 08:46:31 **/ @Data @ApiModel(value="值班值守表,對(duì)應(yīng)表tb_zbzs",description="適用于新增和修改頁面?zhèn)鲄?) public class TbZbzs extends ProBaseEntity{ private static final long serialVersionUID = 1L; @ApiModelProperty(value="id") private String id; // id @ApiModelProperty(value="部門") private String bm; // 部門 @ApiModelProperty(value="值班上報(bào)") private String zbsb; // 值班上報(bào) @ApiModelProperty(value="值班人員") private String zbry; // 值班人員 @ApiModelProperty(value="上報(bào)時(shí)間") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private java.util.Date sbsj; // 上報(bào)時(shí)間 @ApiModelProperty(value="結(jié)束時(shí)間") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private java.util.Date jssj; // 結(jié)束時(shí)間 @ApiModelProperty(value="聯(lián)系方式") private String lxfs; // 聯(lián)系方式 @ApiModelProperty(value="狀態(tài)") private String zt; // 狀態(tài) /** * 邏輯刪除 */ @ApiModelProperty(value="邏輯刪除") private String delFlag; /** * 創(chuàng)建時(shí)間 */ @ApiModelProperty(value="創(chuàng)建時(shí)間") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createDate; }
這里提供的是一個(gè)基礎(chǔ)模板,根據(jù)業(yè)務(wù)的需求可以增加轉(zhuǎn)換條件
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; /** * 新增值班排班表導(dǎo)入Excel表工具類 * zyw */ public class ImportExcelUtil { private final static String excel2003L =".xls"; //2003- 版本的excel private final static String excel2007U =".xlsx"; //2007+ 版本的excel /** * 描述:獲取IO流中的數(shù)據(jù),組裝成List>對(duì)象 * @param in,fileName * @return * @throws Exception */ public static List
> getListByExcel(InputStream in, String fileName) throws Exception { List
> list = null; //創(chuàng)建Excel工作薄 Workbook work = ImportExcelUtil.getWorkbook(in,fileName); if(null == work){ throw new Exception("創(chuàng)建Excel工作薄為空!"); } Sheet sheet = null; Row row = null; Cell cell = null; list = new ArrayList
>(); //遍歷Excel中所有的sheet for (int i = 0; i < work.getNumberOfSheets(); i++) { sheet = work.getSheetAt(i); if(sheet==null){continue;} //遍歷當(dāng)前sheet中的所有行 for (int j = sheet.getFirstRowNum(); j < sheet.getLastRowNum()+1; j++) { row = sheet.getRow(j); if(row==null||row.getFirstCellNum()==j){continue;} //遍歷所有的列 List
主要思想:通過工具類將Excel文件解析成Object泛型的集合,再將集合循環(huán)遍歷,在遍歷中,將每行數(shù)據(jù)一次填入對(duì)象中,再每次循環(huán)中,將賦值后的對(duì)象存入一個(gè)list集合,最后統(tǒng)一將集合執(zhí)行批量上傳的方法,存入數(shù)據(jù)庫。
public MapimportTprkxx(MultipartFile file){ Map resultMap = new HashMap<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List tbZbzsList = new ArrayList<>(); try { //獲取數(shù)據(jù) List > olist = ImportExcelUtil.getListByExcel(file.getInputStream(), file.getOriginalFilename()); resultMap.put("導(dǎo)入成功",200); //封裝數(shù)據(jù) for (int i = 0; i < olist.size(); i++) { List
list = olist.get(i); if (list.get(0) == "" || ("序號(hào)").equals(list.get(0))) { continue; } TbZbzs tbZbzs = new TbZbzs(); tbZbzs.setId(UUID.randomUUID().toString().replace("-", "").substring(0, 20)); //根據(jù)下標(biāo)獲取每一行的每一條數(shù)據(jù) 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", "值班上報(bào)不能為空"); 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", "導(dǎo)入失敗,上報(bào)時(shí)間不能為空"); 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", "導(dǎo)入失敗,結(jié)束時(shí)間不能為空"); 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", "聯(lián)系方式不能為空"); continue; } tbZbzs.setLxfs(String.valueOf(list.get(5))); if (String.valueOf(list.get(6))==null) { resultMap.put("state", "狀態(tài)不能為空"); 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", "導(dǎo)入失敗,創(chuàng)建時(shí)間不能為空"); 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", "導(dǎo)入成功"); }else { resultMap.put("state", "導(dǎo)入失敗"); } } catch (Exception e) { e.printStackTrace(); resultMap.put("state", "導(dǎo)入失敗"); } return resultMap; }
insert into tb_zbzs ( id, bm, zbsb, zbry, sbsj, jssj, lxfs, zt, del_flag, create_date ) VALUES ( #{item.id}, #{item.bm}, #{item.zbsb}, #{item.zbry}, #{item.sbsj}, #{item.jssj}, #{item.lxfs}, #{item.zt}, #{item.delFlag}, #{item.createDate} )
/** * @方法名稱: excelProTbZbzs * @實(shí)現(xiàn)功能: 導(dǎo)入值班值守表Excel TODO: 方法入?yún)⒏鶕?jù)頁面對(duì)象設(shè)置 * @param file * @return java.lang.String * @create by zyw at 2022-03-17 16:49:31 **/ @ApiOperation(value="導(dǎo)入值班值守表Excel",notes="返回導(dǎo)入情況接口",response = TbZbzs.class) @PostMapping(value = "/excelProTbZbzs") public String excelProTbZbzs(@RequestParam("file") MultipartFile file){ try { return buildResultStr(service.importTprkxx(file).get("state").equals("導(dǎo)入成功") ? buildSuccessResultData() : buildErrorResultData(service.importTprkxx(file).get("state").toString())); }catch (RuntimeException e){ logError(log, e); return buildResultStr(buildErrorResultData(e)); } }
關(guān)于“Java怎么將Excel數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。