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

先看下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. 【世界最大人脸对齐数据集】ICCV 2017:距离解决人脸对齐已不远
  2. vfast-全新的开始——荣新的第一天
  3. python在财务中的应用实训报告-DATATOM | 大数据实训
  4. Caffe学习系列(13):对训练好的模型进行fine-tune
  5. 【转】在Ubuntu中运行Exe程序
  6. 全面快速准确地检索医学文献信息的策略
  7. 从4篇论文看Transformer的局部信息建模
  8. python装饰器作用噜咕_python 装饰器的实际作用有哪些
  9. VBKiller使用说明
  10. 解决outlook不能显示鼠标问题
  11. 计算机操作系统教程讲解视频,计算机操作系统(54集)全套教学视频
  12. linux ddd yum,Linux环境ddd安装与使用
  13. When is nearest neighbor meaningful
  14. ​微信Android版支持改微信号,淘宝硬核拒绝改名要求;5G 套餐价格松动;Kotlin 1.4 第二个预览版发布|极客头条...
  15. 为防 Android 碎片化?Google 强迫开发者使用自有开发工具!
  16. callback用法 js vue_Vue前端开发——使用高德地图WebApi
  17. 哈尔滨举办冰雪动漫节 coser演绎《王者荣耀》英雄
  18. 2021工程伦理慕课答案
  19. 自制 arduino 音符频率对照表(音符在arduino里对应的值)
  20. 中国互联网创业大咖(收藏)

热门文章

  1. 如何创建和共享iGoogle标签
  2. 处理团队中的消极情绪
  3. 代理ip填写格式有什么要求?
  4. 打开桌面计算机投屏到扩展屏,华为智慧屏怎么共享电脑屏幕
  5. 清除Svchost.exe
  6. 技术岗的职业规划_银行信息技术岗职业规划范文
  7. 前端vs图片:2 图片深度、图片分类等基本信息
  8. 目前常用的室内导航地图有哪些?什么软件可以室内导航?
  9. 优盘插计算机上成快捷方式,u盘一插就变成快捷方式打不开怎么办 u盘变成快捷方式怎么办...
  10. 打开计算机桌面里面有其他图标,Win7电脑桌面上的快捷方式图标都变成相同且打不开...