Java解析Excel文件并把数据存入数据库

这篇具有很好参考价值的文章主要介绍了Java解析Excel文件并把数据存入数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用SpingMVC和hibernate框架实现

1. web.xml中的配置文件

web.xml中的配置文件就按照这种方式写,只需要把"application.xml"换成你的配置文件名即可

org.springframework.web.context.ContextLoaderListener


contextConfigLocation

classpath:application.xml

2. application.xml的配置文件(固定写法)

在这个配置文件中你还可以规定上传文件的格式以及大小等多种属性限制

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

3. 文件上传的前端HTML

注意:

1.enctype=“multipart/form-data” 必须写,封装表单

2.method=“post”,提交方式必须为"post"提交

3.action=“${text}/uploadfile”

支持的excel格式为:xls、xlsx、xlsb、xlsm、xlst!

4. 验证上传文件的格式

//用于验证文件扩展名的正则表达式

function checkSuffix(){

var name = document.getElementById("txt").value;

var strRegex = "(.xls|.xlsx|.xlsb|.xlsm|.xlst)$";

var re=new RegExp(strRegex);

if (re.test(name.toLowerCase())){

alert("上传成功");

document.fileupload.submit();

} else{

alert("文件名不合法");

}

}

5. dao层的接口和实现类

package com.gxxy.team1.yyd.dao;

public interface IFileUploadDao {

public void save(Object o);

}
package com.gxxy.team1.yyd.dao.impl;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Repository;

import com.gxxy.team1.yyd.dao.IFileUploadDao;

@Repository

public class FileUploadDaoImpl implements IFileUploadDao {

@Autowired

private SessionFactory sessionFactory;

private Session getSession() {

Session session = sessionFactory.getCurrentSession();

return session;

}

@Override

public void save(Object o) {

getSession().save(o);

}

}

6. service层的接口和实现类

package com.gxxy.team1.yyd.service;

import java.util.List;

public interface IFileUploadService {

public List readExcel(String path);

public void save(Object o);

}
package com.gxxy.team1.yyd.service.impl;

import java.io.File;

import java.io.FileInputStream;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.List;

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

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

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.ss.usermodel.WorkbookFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.gxxy.team1.yyd.dao.IFileUploadDao;

import com.gxxy.team1.yyd.service.IFileUploadService;

@Service

public class FileUploadServiceImpl implements IFileUploadService {

@Autowired

private IFileUploadDao fileDao;

@Override

public List readExcel(String path) {

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");

List list = null;

try {

//同时支持Excel 2003、2007

File excelFile = new File(path); //创建文件对象

FileInputStream is = new FileInputStream(excelFile); //文件流

Workbook workbook = WorkbookFactory.create(is); //这种方式 Excel 2003/2007/2010 都是可以处理的

int sheetCount = workbook.getNumberOfSheets(); //Sheet的数量

//存储数据容器

list = new ArrayList();

//遍历每个Sheet

for (int s = 0; s < sheetCount; s++) {

Sheet sheet = workbook.getSheetAt(s);

int rowCount = sheet.getPhysicalNumberOfRows(); //获取总行数

//遍历每一行

for (int r = 0; r < rowCount; r++) {

Row row = sheet.getRow(r);

int cellCount = row.getPhysicalNumberOfCells(); //获取总列数

//用来存储每行数据的容器

String[] model = new String[cellCount-1];

//遍历每一列

for (int c = 0; c < cellCount; c++) {

Cell cell = row.getCell(c);

int cellType = cell.getCellType();

if(c == 0) continue;//第一列ID为标志列,不解析

String cellValue = null;

switch(cellType) {

case Cell.CELL_TYPE_STRING: //文本

cellValue = cell.getStringCellValue();

//model[c-1] = cellValue;

break;

case Cell.CELL_TYPE_NUMERIC: //数字、日期

if(DateUtil.isCellDateFormatted(cell)) {

cellValue = fmt.format(cell.getDateCellValue()); //日期型

//model[c-1] = cellValue;

}

else {

cellValue = String.valueOf(cell.getNumericCellValue()); //数字

//model[c-1] = cellValue;

}

break;

case Cell.CELL_TYPE_BOOLEAN: //布尔型

cellValue = String.valueOf(cell.getBooleanCellValue());

break;

case Cell.CELL_TYPE_BLANK: //空白

cellValue = cell.getStringCellValue();

break;

case Cell.CELL_TYPE_ERROR: //错误

cellValue = "错误";

break;

case Cell.CELL_TYPE_FORMULA: //公式

cellValue = "错误";

break;

default:

cellValue = "错误";

}

System.out.print(cellValue + " ");

model[c-1] = cellValue;

}

//model放入list容器中

list.add(model);

System.out.println();

}

}

is.close();

}

catch (Exception e) {

e.printStackTrace();

}

return list;

}

@Override

public void save(Object o) {

fileDao.save(o);

}

}

7. controller层实现

//文件上传方法文章来源地址https://www.toymoban.com/news/detail-819474.html

@RequestMapping("/uploadfile")

public String upload(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request, ModelMap model,Model mod) throws Exception {

String path = request.getSession().getServletContext().getRealPath("upload");

System.out.println("文件路径:"+path);

String originalFilename = file.getOriginalFilename();

String type = file.getContentType();

//originalFilename = UUID.rahttp://ndomUUID().toString()+originalFilename;

System.out.println("目标文件名称:"+originalFilename+",目标文件类型:"+type);

File targetFile = new File(path,originalFilename );

if (!targetFile.getParentFile().exists()) {

targetFile.getParentFile().mkdirs();

}else if (!targetFile.exists()) {

targetFile.mkdirs();

}

// 获得上传文件的文件扩展名

String subname = originalFilename.substring(originalFilename.lastIndexOf(".")+1);

System.out.println("文件的扩展名:"+subname);

try {

file.transferTo(targetFile);

} catch (Exception e) {

e.printStackTrace();

}

FileUploadServiceImpl fileUp = new FileUploadServiceImpl();

String rootpath = path + File.separator + originalFilename;

List excellist = fileUp.readExcel(rootpath);

int len = excellist.size();

System.out.println("集合的长度为:"+len);

for (int i = 0; i < len; i++) {

String[] fields = excellist.get(i);

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

String sampleNo = fields[0];

Double valueOf = Double.valueOf(fields[1]);

int sampleType = valueOf.intValue(); //double转int

String createTime = fields[2];

Date createTime1 = format.parse(createTime);

String name = fields[3];

String pId = fields[4];

String hospitalName = fields[5];

String cellPhone = fields[6];

Sample sample = new Sample(sampleNo, sampleType, createTime1, name, pId);

Patient patient = new Patient(hospitalName, cellPhone);

fileService.save(sample);

fileService.save(patient);

}

//model.addAttribute("fileUrl", request.getContextPath()+"/upload/"+originalFilename);

String username = (String) request.getSession().getAttribute("username");

List> power = powerService.power(username);

mod.addAttribute("list", power);

return "redirect:/ yyd";

}

到了这里,关于Java解析Excel文件并把数据存入数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [详细步骤]Java将Excel文件导入到数据库表中、并使用postman测试

    1、Maven依赖添加 2、需要使用的类 controller:ExcelController entity:ExcelEntity(设计此实体类,需要与excel文件一一对应) mapper:ExcelMapper service:ExcelServiceImpl、ExcelService util:ReadExcelUtil 3、代码 4、postman测试 file(excel)的文件路径需真实存在,下图进行设置路径、我的excel放在了

    2024年02月07日
    浏览(34)
  • (解析+源码)基于JAVA Swing+MySQL实现学生信息管理系统(增、删、改、查)数据库/文件存储

    本文适合 有一定JAVA编程基础(听过一点课的同学) 的同学“食用”,源代码都在文末 源代码(点击跳转) ,第四部分是各个模块的实现,新建一个工程把下面代码添加进去,然后在数据库里按id-username-password和id-name-sex-telephone-number-birthday-note创建两个表,在Connect.java里面将us

    2024年02月04日
    浏览(39)
  • C#将数据库数据导出到Excel & 将Excel文件导入到数据库

    1、读取Excel数据并写入到SQLServer数据库中; 2、将SQLServer数据库中的数据写入到Excel表中; 以下部分程序代码:  完整代码程序及配套测试数据库数据如下: https://download.csdn.net/download/XueJiaoKui/85331183 https://download.csdn.net/download/XueJiaoKui/85331183

    2024年02月16日
    浏览(31)
  • POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表

    POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现”。 所以POI的主要功能是可以用Java操作Microsoft Office的相关文件,但是一般我

    2024年02月10日
    浏览(39)
  • 微信小程序 -- 数据库数据excel文件批量导入

    一、excel文件批量导入数据到数据库 1.创建node.js函数upload,点击upload右键外部终端中安装类库 2.云函数代码 js代码

    2024年02月12日
    浏览(49)
  • 调用webservice导excel文件内容进入数据库

    一个早期vb.net写的程序,需要增加功能,要导入excel数据,并按条件显示。 1.数据库端 1.1因为是要把表作为存储过程的输入参数,所以先新建一个数据类型xtabletype   create type xtabletype as table(prodid varchar(20),itemid  varchar(20),target  varchar(150)) 1.2新建存储数据的表   create table imp

    2024年02月14日
    浏览(25)
  • Python将Excel文件插入Mysql数据库(脚本)

    🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:一晌小贪欢的博客主页 👍 该系列文章专栏:Python办公自动化专栏 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 ❤️ 欢迎各位佬关注! ❤️ 前言 最近接到一个

    2024年02月05日
    浏览(34)
  • 将前端传过来的String的日期数据转换成LocalDateTime类型的数据存入数据库

    String类型的xxxx年x月xx日与LocalDateTime类型的 yyyy-mm-dd相互转化 1.导入DataUtil工具类 2.调用工具类 3.输出结果

    2024年04月13日
    浏览(37)
  • 将图片转换成Base64格式存入数据库以及在前端页面展示

    这个示例接口假设已经有了一个数据库连接池,并且已经注入或初始化了数据源。这个接口的功能是读取指定路径的图片文件,将其转换为Base64编码字符串,然后将其存入数据库中。可以通过调用 saveImageToDB 方法来实现这个功能。调用该方法时需要传入要存储的图片文件的路

    2024年02月16日
    浏览(37)
  • Springboot配置Log4j日志系统,并将日志存入数据库

    Log4j是apache公司开发的一款日志管理系统,可以高效的管理系统中出现的BUG或者各种信息,并且可以已文本的方式或者数据库存入的方式来记录数据 在pom.xml中导入Log4j依赖 在Resources文件夹下创建一个log4j.properties文件 编写配置文件 这是个测试类 可以看见,控制台和数据库表

    2024年02月08日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包