因为业务需要用到导入数据的功能,所以自己也研究了下,记录下来

先看下maven包

org.apache.poi

poi

3.9

org.apache.poi

poi-ooxml

3.9

commons-fileupload

commons-fileupload

1.3.1

commons-io

commons-io

2.4

前端的index.jsp 先下载excel模板再填写内容后导入mysql(大致是这个流程)

文件上传

下载Exel模板

mapper的sql语句(我用的测试表里面只有这三个字段)

insert into my_test(id,name,endTime)

VALUES(#{item.id},#{item.name},#{item.endTime})

这是service层方法(注:这里的PageData等同于map)

//excel批量导入数据

public void importExcelInfo(InputStream in, MultipartFile file) throws Exception {

List> listob = ExcelUtil.getBankListByExcel(in,file.getOriginalFilename());

List salaryList = new ArrayList<>();//遍历listob数据,把数据放到List中

for (int i = 0; i < listob.size(); i++) {

List ob = listob.get(i);

PageData pd=newPageData();//设置编号

pd.put("id",String.valueOf(ob.get(1)));//通过遍历实现把每一列封装成一个model中,再把所有的model用List集合装载

pd.put("name",String.valueOf(ob.get(2)));

pd.put("endTime",String.valueOf(ob.get(3)));//object类型转Double类型

salaryList.add(pd);

}//批量插入

dao.batchSave("TestMapper.insertInfoBatch",salaryList);

}

因为我用的是SqlSessionTemplate进行增删查改,没有用实体类的方式(框架为ssm)

dao

package com.pskj.JXGSLZ.dao;

import java.util.List;public interfaceDao {/**

* 保存对象

*

* @param str

* @param obj

* @return

* @throws Exception*/Object save(String str, Object obj) throws Exception;/**

* 批量保存

* @param str

* @param objs

* @return

* @throws Exception*/Object batchSave(String str, List objs)throws Exception;/**

* 修改对象

*

* @param str

* @param obj

* @return

* @throws Exception*/Object update(String str, Object obj) throws Exception;/**

* 删除对象

*

* @param str

* @param obj

* @return

* @throws Exception*/Object delete(String str, Object obj) throws Exception;/**

* 查找对象

*

* @param str

* @param obj

* @return

* @throws Exception*/Object findForObject(String str, Object obj) throws Exception;/**

* 查找对象

*

* @param str

* @param obj

* @return

* @throws Exception*/Object findForList(String str, Object obj) throws Exception;

}

DaoImpl(dao的实现类)

package com.pskj.JXGSLZ.dao.daoImpl;

import com.pskj.JXGSLZ.dao.Dao;

import org.mybatis.spring.SqlSessionTemplate;

import org.springframework.stereotype.Repository;

import javax.annotation.Resource;

import java.util.List;

@Repository("daoImpl")public classDaoImpl implements Dao {

@Resource(name="sqlSessionTemplate")privateSqlSessionTemplate sqlSessionTemplate;/**

* 保存对象

*

* @param str

* @param obj

* @return

* @throws Exception*/

publicObject save(String str, Object obj){returnsqlSessionTemplate.insert(str, obj);

}/**

* 批量保存

* @param str

* @param objs

* @return

* @throws Exception*/

publicObject batchSave(String str, List objs ){returnsqlSessionTemplate.insert(str, objs);

}/**

* 批量保存

* @param str

* @param objs

* @return

* @throws Exception*/

//public void batchSave(String str, List objs ){//SqlSessionFactory sqlSessionFactory=sqlSessionTemplate.getSqlSessionFactory();// //批量执行器//SqlSession sqlSession=sqlSessionFactory.openSession(ExecutorType.BATCH,false);//try{//if(objs!=null){//for(int i=0,len=objs.size();i

//}//}catch (Exception e){//e.printStackTrace();//}finally {//sqlSession.close();//}//}

/**

* 修改对象

*

* @param str

* @param obj

* @return

* @throws Exception*/@OverridepublicObject update(String str, Object obj){returnsqlSessionTemplate.update(str,obj);

}/**

* 删除对象

*

* @param str

* @param obj

* @return

* @throws Exception*/

publicObject delete(String str, Object obj){returnsqlSessionTemplate.delete(str, obj);

}/**

* 查找对象

*

* @param str

* @param obj

* @return

* @throws Exception*/@OverridepublicObject findForObject(String str, Object obj){returnsqlSessionTemplate.selectOne(str, obj);

}/**

* 查找对象

*

* @param str

* @param obj

* @return

* @throws Exception*/@OverridepublicObject findForList(String str, Object obj){returnsqlSessionTemplate.selectList(str, obj);

}

}

操作excel需要的操作类

ExcelUtil

package com.pskj.JXGSLZ.utils.Excel;

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.InputStream;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.List;/**

* @date 2018/10/11

* 导出excel*/

public classExcelUtil {private final static String excel2003L =".xls"; //2003- 版本的excel

private final static String excel2007U =".xlsx"; //2007+ 版本的excel

/**

* Excel导入*/

public static List> getBankListByExcel(InputStream in, String fileName) throws Exception {

List> list = null;//创建Excel工作薄

Workbook work = getWorkbook(in,fileName);if(null ==work){throw new Exception("创建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;}//遍历当前sheet中的所有行//包涵头部,所以要小于等于最后一列数,这里也可以在初始值加上头部行数,以便跳过头部

for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {//读取一行

row =sheet.getRow(j);//去掉空行和表头

if(row==null||row.getFirstCellNum()==j){continue;}//遍历所有的列

List li = new ArrayList();for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {

cell=row.getCell(y);

li.add(getCellValue(cell));

}

list.add(li);

}

}returnlist;

}/**

* 描述:根据文件后缀,自适应上传文件的版本*/

public staticWorkbook 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("解析的文件格式有误!");

}returnwb;

}/**

* 描述:对表格中数值进行格式化*/

public staticObject getCellValue(Cell cell){

Object value= null;

DecimalFormat df= new DecimalFormat("0"); //格式化字符类型的数字

SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); //日期格式化

DecimalFormat df2 = new DecimalFormat("0.00"); //格式化数字

switch(cell.getCellType()) {caseCell.CELL_TYPE_STRING:

value=cell.getRichStringCellValue().getString();break;caseCell.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=df2.format(cell.getNumericCellValue());

}break;caseCell.CELL_TYPE_BOOLEAN:

value=cell.getBooleanCellValue();break;caseCell.CELL_TYPE_BLANK:

value= "";break;default:break;

}returnvalue;

}

}

再就是controller层(注testService是我自己写的service)

//Excel导入数据

@RequestMapping("import")public voidimpotr(HttpServletRequest request) {

Map map=newHashMap();//获取上传的文件

MultipartHttpServletRequest multipart =(MultipartHttpServletRequest) request;

MultipartFile file= multipart.getFile("files");try{

InputStreamin =file.getInputStream();//数据导入

testService.importExcelInfo(in,file);in.close();//关闭流

map.put("success",true);

}catch(Exception e){

e.printStackTrace();

map.put("success",false);

}

JsonUtils.writeJson(map,this.getRequest(), this.getResponse());

}

先看看测试表数据

启动项目后的index.jsp页面

点击下载Excel模板得到如下(这是事先制作好的模板)

添加数据进去上传文件

再刷新测试表就可以看到数据了

excel 复制到mysql_excel导入数据到mysql相关推荐

  1. php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...

  2. 从csv文件中导入数据到MySQL数据库

    从csv文件中导入数据到MySQL数据库 转: 一.Workbench客户端导入(8.0.11基本导不全且速度奇慢) 1.点击如下图标创建数据库(非必要) 2.在表类上右键导入 二.SQL语句导入(可 ...

  3. Linux的load导入语句,LOAD DATA INFILE语句导入数据进入MySQL的一些注意事项

    可以用以下语句导入CSV或其他格式数据进入MySQL数据库, LOAD DATA LOCAL INFILE "C:\\wamp\\apps\\litigationinfo.csv" ...

  4. 随笔编号-09 批量导入数据(Mysql)报MySQL server has gone away 问题的解决方法

    问题场景: 使用*.sql 脚本,批量导入数据到mysql实例中,使用DOS 界面导入的,期间,到最后一步 source D:\aaa.sql  回车后,系统提示 MySQL server has g ...

  5. EasyExcel生成带下拉列表或二级级联列表的Excel模版+自定义校验导入数据(附仓库)

    EasyExcel生成带下拉列表或二级级联列表的Excel模版+自定义校验导入数据(附仓库) 目录 EasyExcel生成带下拉列表或二级级联列表的Excel模版+自定义校验导入数据(附仓库) 仓库 ...

  6. 3.2.3 Sqoop 数据迁移工具, 导入数据import, MySQL到HDFS/Hive, 导出数据export,增量数据导入, Sqoop job,常用命令及参数

    目录 数据迁移工具 -- Sqoop 第一部分 Sqoop概述 第二部分 安装配置 第三部分 应用案例 第 1 节 导入数据import MySQL 到 HDFS MySQL 到 Hive 第 2 节 ...

  7. php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...

  8. java读取Excel文件,用JDBC导入数据到mysql

    本需求最重要的就是如何将Excel文件中的数据读取到java集合中.首先要知道Excel表格中的每行记录即为一个对象,我们可以使用操作Excel的org.apache.poi框架,对数据进行读取.首先 ...

  9. java mysql 文本导入数据语句_Java利用MYSQL LOAD DATA LOCAL INFILE实现大批量导入数据到MySQL...

    Mysql load data的使用 数据库中,最常见的写入数据方式是通过SQL INSERT来写入,另外就是通过备份文件恢复数据库,这种备份文件在MySQL中是SQL脚本,实际上执行的还是在批量IN ...

  10. Linux下通过txt文件导入数据到MySQL数据库

    1.修改配置文件 在 /etc/my.conf 中添加 local_infile=1 2.重启MySQL >service mysqld restart 3.登录数据库 登录时添加参数 --lo ...

最新文章

  1. QIIME 2教程. 08差异丰度分析gneiss(2021.2)
  2. seo网站营销与内容营销不可分割
  3. 第44节:Java当中的JVM
  4. 希沃展台如何使用_【海安幼教微家园】玩转希沃白板 点亮精彩课堂 —长江路幼儿园开展希沃一体机操作技能培训...
  5. 石墨烯将是下一个万亿级别的产业,投资者该如何提前布局?
  6. 云服务器可以文件服务器,云服务器 可以上传文件
  7. 一张有趣的图--《teach yourself c++ in 21 days》
  8. linux 项目内存吃掉,Linux内存被吃掉了,它去哪里了?
  9. 菜鸟的学习之路(13) —TreeSet类的排序
  10. mysql涉及表 规范_MySql数据库表设计规范
  11. jquery06 jQuery.extend 给jQuery函数添加、继承 静态方法
  12. python机器学习案例系列教程——极大似然估计、EM算法
  13. 关于WAP技术的介绍
  14. 从金蝶k3到金税盘_金蝶K3操作流程(全篇)
  15. 【AD封装】插件电感,变压器(带3D)
  16. 上海python数据分析_python数据分析项目——链家上海二手房数据分析(一)
  17. 队列同步器(AbstractQueuedSynchronizer)源码简析
  18. 阿尔伯塔计算机硕士要求,阿尔伯塔大学计算机硕士专业介绍
  19. netmiko链接思科WLC无线控制器
  20. ASP.NET CORE WEB应用(有数据库操作的应用)发布到IIS

热门文章

  1. 湖仓一体在金融科技行业的实践
  2. 计算机教育应用研究,技术教育在计算机科学与技术师范专业中的应用研究
  3. 微软借云重振中国市场希望渺茫
  4. 苹果id怎么注册?老果粉教你创建新的Apple ID
  5. 工信部官宣:5G商用牌照即将发放!
  6. 计算机管理格式化硬盘,细说电脑怎么格式化硬盘
  7. 在线文档 - 腾讯文档
  8. android 坡度计算器,坡度角度换算(角度和坡比对照表)
  9. 实训十二:交换机隔离VLAN配置
  10. 画基因结构图 gggenes 用法