通过java将Excel表格导入数据到数据库

import com.mosukj.manage.entity.BuiPatientInfo;

import com.spire.ms.System.DateTime;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.*;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

import java.io.InputStream;

import java.text.DecimalFormat;

import java.time.LocalDate;

import java.time.LocalDateTime;

import java.time.format.DateTimeFormatter;

import java.util.ArrayList;

import java.util.List;

/**

  • @author xjt

  • @version 1.0

*/

public class ReadPatientExcelUtil {

//总行数

private static int totalRows = 0;

//总条数

private static int totalCells = 0;

//错误信息接收器

private static String errorMsg;

/**

  • 读EXCEL文件,获取信息集合

  • @return

*/

public static List getExcelInfo(MultipartFile mFile) {

String fileName = mFile.getOriginalFilename();//获取文件名

try {

if (!validateExcel(fileName)) {// 验证文件名是否合格

return null;

}

boolean isExcel2003 = true;// 根据文件名判断文件是2003版本还是2007版本

if (isExcel2007(fileName)) {

isExcel2003 = false;

}

List userList = createExcel(mFile.getInputStream(), isExcel2003);

return userList;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

  • 根据excel里面的内容读取客户信息

  • @param is 输入流

  • @param isExcel2003 excel是2003还是2007版本

  • @return

  • @throws IOException

*/

public static List createExcel(InputStream is, boolean isExcel2003) {

try{

Workbook wb = null;

if (isExcel2003) {// 当excel是2003时,创建excel2003

wb = new HSSFWorkbook(is);

} else {// 当excel是2007时,创建excel2007

wb = new XSSFWorkbook(is);

}

List userList = readExcelValue(wb);// 读取Excel里面客户的信息

return userList;

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

/**

  • 读取Excel里面客户的信息

  • @param wb

  • @return

*/

private static List readExcelValue(Workbook wb) {

//默认会跳过第一行标题

// 得到第一个shell

Sheet sheet = wb.getSheetAt(0);

// 得到Excel的行数

totalRows = sheet.getPhysicalNumberOfRows();

// 得到Excel的列数(前提是有行数)

if (totalRows > 1 && sheet.getRow(0) != null) {

totalCells = sheet.getRow(0).getPhysicalNumberOfCells();

}

List userList = new ArrayList();

// 循环Excel行数

for (int r = 1; r < totalRows; r++) {

Row row = sheet.getRow®;

if (row == null){

continue;

}

BuiPatientInfo user = new BuiPatientInfo();

// 循环Excel的列

for (int c = 0; c < totalCells-1; c++) {

Cell cell = row.getCell©;

if (null != cell) {

if (c == 0) { //第一列

//如果是纯数字,将单元格类型转为String

if(cell.getCellTypeEnum() == CellType.NUMERIC){

cell.setCellType(CellType.STRING);

}

user.setPatientName(cell.getStringCellValue());//将单元格数据赋值给user

}

else if (c == 1){

if(cell.getCellTypeEnum() == CellType.NUMERIC){

cell.setCellType(CellType.STRING);

}

user.setPatientIdentity(cell.getStringCellValue());

}

else if (c == 2){

if(cell.getCellTypeEnum() == CellType.NUMERIC){

cell.setCellType(CellType.STRING);

}

String stringCellValue = cell.getStringCellValue();

user.setHealingId(stringCellValue);

}

else if (c == 3){

if(cell.getCellTypeEnum() == CellType.NUMERIC){

cell.setCellType(CellType.STRING);

}

user.setElseInfo(String.valueOf(cell.getStringCellValue()));

}

}

}

//将excel解析出来的数据赋值给对象添加到list中

user.setUpdateTime(LocalDateTime.now());

user.setPatientBirthdate(IdentityUtil.getPatientBirth(user.getPatientIdentity())); //拿到身份中好通过已经写好的通过身份证信息获取出生年月工具类

user.setPatientSex(IdentityUtil.getPatientSex(user.getPatientIdentity())); //通过省份证号,获取男女信息工具类

user.setPatientState(1); //当前实体类字段是固定的,不是excel数据中的。每个对象都可以再遍历完后增加固定属性值

user.setCreateId(2L);

user.setCreateTime(LocalDateTime.now());

// 添加到list

userList.add(user);

}

return userList;

}

/**

  • 验证EXCEL文件

  • @param filePath

  • @return

*/

public static boolean validateExcel(String filePath) {

if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) {

errorMsg = “文件名不是excel格式”;

return false;

}

return true;

}

// @描述:是否是2003的excel,返回true是2003

public static boolean isExcel2003(String filePath) {

return filePath.matches(“^.+\.(?i)(xls)$”);

}

//@描述:是否是2007的excel,返回true是2007

public static boolean isExcel2007(String filePath) {

return filePath.matches(“^.+\.(?i)(xlsx)$”);

}

}

调用getExcelInfo可以得到一个对象数组。

之后就方便导入数据库了

我拿到数组对象后的处理方式:

实例业务接口如下

===========================================================================

@PostMapping(“/excelExport”)

public void test(HttpServletRequest request,HttpServletResponse response,@RequestParam(value=“file”,required = false) MultipartFile file){

long startTime = System.currentTimeMillis();

List list = new ArrayList();

Map<String,Object> res = new HashMap<>();

int row=1;

int rowSuccess=0;

Integer errorCount=0;

QueryWrapper wrapper;

// ReadExcel readExcel = new ReadExcel();

List excelInfo = ReadPatientExcelUtil.getExcelInfo(file);

for (BuiPatientInfo patientInfo : excelInfo) {

// System.out.println(patientInfo);

wrapper=new QueryWrapper<>();

row++;

patientInfo.setHealingId(patientInfo.getHealingId());

wrapper.eq(“healing_Id”, patientInfo.getHealingId());

wrapper.ne(“patient_state”, 9);

//业务代码,通过患者id查询数据库中式否有该患者,如果已存在,则不保存,跳过该患者

int patientCount = buiPatientInfoService.getBaseMapper().getPatientCount(wrapper);

if (patientCount>0){

list.add(“在第”+row+“行的<”+patientInfo.getHealingId()+“>患者已存在!!”);

errorCount++;

}else {

boolean save = buiPatientInfoService.save(patientInfo);

if (save){

rowSuccess++;

}

}

}

if (list.size()>0){

res.put(“log”, list);

}

res.put(“success”, “导入数据成功条数:”+rowSuccess);

res.put(“error”, “导入数据失败条数:”+errorCount);

long endTime = System.currentTimeMillis();

String time = String.valueOf((endTime - startTime) / 1000);

res.put(“time”, “导入数据用时:”+time+“秒”);

renderResult(response, res);

}

面试资料整理汇总

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。

面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了

在这里祝大家能够拿到心仪的offer!

m.currentTimeMillis();

String time = String.valueOf((endTime - startTime) / 1000);

res.put(“time”, “导入数据用时:”+time+“秒”);

renderResult(response, res);

}

面试资料整理汇总

[外链图片转存中…(img-47qZVGx6-1714811347002)]

[外链图片转存中…(img-Huy8QC7d-1714811347002)]

这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。

面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了

在这里祝大家能够拿到心仪的offer!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中将Excel导入并存储到数据库可以按照以下步骤进行: 1. 使用Java中的Apache POI库来读取Excel表中的数据。首先,需要添加POI依赖项到项目的构建文件中。 2. 使用POI库中的Workbook类打开Excel文件。根据文件的扩展名(.xls或.xlsx),选择适当的Workbook实现类。 3. 通过获取工作表(Sheet)并遍历工作表的行(Row)和单元格(Cell),可以获取Excel表中的数据。根据Excel表的结构,可以使用getCell()方法获取特定单元格的数据。 4. 通过解析每个单元格的数据,并使用Java数据结构(如List、Map等)将其存储到内存中,以便稍后将其存储到数据库。 5. 连接到数据库,并使用JDBC(Java数据库连接)编程接口来执行数据库操作。首先,需要加载适当的数据库驱动程序,并使用合适的URL、用户名和密码建立连接。 6. 创建数据库表,以存储从Excel导入数据。根据Excel表的结构,使用SQL语句创建表和列。 7. 使用JDBC的PreparedStatement接口,为每个数据行创建并执行INSERT语句来将数据插入到数据库表中。通过遍历内存中的数据集合,可以为每个数据行绑定参数并执行INSERT语句。 8. 在插入所有数据行后,提交并关闭数据库连接。关闭数据库连接可以释放资源,并确保数据被正确写入数据库。 9. 在完成数据导入后,可以进行必要的数据校验和验证。例如,检查插入的行数是否与Excel表中的行数相匹配,或者检查插入的数据是否满足业务规则。 以上是将Excel表格数据导入数据库的基本步骤。+这个过程涉及到的具体实施会有更多的细节和实现方式,可以根据具体需求进行调整和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值