excel 复制到mysql_excel导入数据到mysql
因为业务需要用到导入数据的功能,所以自己也研究了下,记录下来
先看下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相关推荐
- php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...
- 从csv文件中导入数据到MySQL数据库
从csv文件中导入数据到MySQL数据库 转: 一.Workbench客户端导入(8.0.11基本导不全且速度奇慢) 1.点击如下图标创建数据库(非必要) 2.在表类上右键导入 二.SQL语句导入(可 ...
- Linux的load导入语句,LOAD DATA INFILE语句导入数据进入MySQL的一些注意事项
可以用以下语句导入CSV或其他格式数据进入MySQL数据库, LOAD DATA LOCAL INFILE "C:\\wamp\\apps\\litigationinfo.csv" ...
- 随笔编号-09 批量导入数据(Mysql)报MySQL server has gone away 问题的解决方法
问题场景: 使用*.sql 脚本,批量导入数据到mysql实例中,使用DOS 界面导入的,期间,到最后一步 source D:\aaa.sql 回车后,系统提示 MySQL server has g ...
- EasyExcel生成带下拉列表或二级级联列表的Excel模版+自定义校验导入数据(附仓库)
EasyExcel生成带下拉列表或二级级联列表的Excel模版+自定义校验导入数据(附仓库) 目录 EasyExcel生成带下拉列表或二级级联列表的Excel模版+自定义校验导入数据(附仓库) 仓库 ...
- 3.2.3 Sqoop 数据迁移工具, 导入数据import, MySQL到HDFS/Hive, 导出数据export,增量数据导入, Sqoop job,常用命令及参数
目录 数据迁移工具 -- Sqoop 第一部分 Sqoop概述 第二部分 安装配置 第三部分 应用案例 第 1 节 导入数据import MySQL 到 HDFS MySQL 到 Hive 第 2 节 ...
- php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...
- java读取Excel文件,用JDBC导入数据到mysql
本需求最重要的就是如何将Excel文件中的数据读取到java集合中.首先要知道Excel表格中的每行记录即为一个对象,我们可以使用操作Excel的org.apache.poi框架,对数据进行读取.首先 ...
- java mysql 文本导入数据语句_Java利用MYSQL LOAD DATA LOCAL INFILE实现大批量导入数据到MySQL...
Mysql load data的使用 数据库中,最常见的写入数据方式是通过SQL INSERT来写入,另外就是通过备份文件恢复数据库,这种备份文件在MySQL中是SQL脚本,实际上执行的还是在批量IN ...
- Linux下通过txt文件导入数据到MySQL数据库
1.修改配置文件 在 /etc/my.conf 中添加 local_infile=1 2.重启MySQL >service mysqld restart 3.登录数据库 登录时添加参数 --lo ...
最新文章
- QIIME 2教程. 08差异丰度分析gneiss(2021.2)
- seo网站营销与内容营销不可分割
- 第44节:Java当中的JVM
- 希沃展台如何使用_【海安幼教微家园】玩转希沃白板 点亮精彩课堂 —长江路幼儿园开展希沃一体机操作技能培训...
- 石墨烯将是下一个万亿级别的产业,投资者该如何提前布局?
- 云服务器可以文件服务器,云服务器 可以上传文件
- 一张有趣的图--《teach yourself c++ in 21 days》
- linux 项目内存吃掉,Linux内存被吃掉了,它去哪里了?
- 菜鸟的学习之路(13) —TreeSet类的排序
- mysql涉及表 规范_MySql数据库表设计规范
- jquery06 jQuery.extend 给jQuery函数添加、继承 静态方法
- python机器学习案例系列教程——极大似然估计、EM算法
- 关于WAP技术的介绍
- 从金蝶k3到金税盘_金蝶K3操作流程(全篇)
- 【AD封装】插件电感,变压器(带3D)
- 上海python数据分析_python数据分析项目——链家上海二手房数据分析(一)
- 队列同步器(AbstractQueuedSynchronizer)源码简析
- 阿尔伯塔计算机硕士要求,阿尔伯塔大学计算机硕士专业介绍
- netmiko链接思科WLC无线控制器
- ASP.NET CORE WEB应用(有数据库操作的应用)发布到IIS