上传excel数据到数据库中
上传excel表格数据到数据库
导入固定路径下的excel数据到数据库
<form id="disposeFlightDataForm" action="../upload/disposeFlightData"
method="post">
<input id="disposeFlightDataButton" type="submit" value="处理航班数据" />
</form>
后台代码类
@Controller
@RequestMapping(value = "/upload")
public class UploadSaleDataAction
/**
* 页面上传excel文件保存到tomcat的sams/upload目下
*
* @param file
* @param request
* @param model
*/
@RequestMapping(value = "/disposeFlightData")
public String disposeFlightData() {
flightDataService.disposeFlightData();
return GO_UPLAODEXCEL;
}
@Component
@Transactional
@Service
public class FlightDataServiceImpl implements FlightDataService类
@Override
public void disposeFlightData() {
// 接收的文件所在目录
String filePath = "E:/Accpet";
FileOperate.newFolder(filePath);
File fileDir = new File(filePath);
File[] flightDataFiles = fileDir.listFiles();
System.out.println("该目录下对象个数:" + flightDataFiles.length); // 循环目录下的文件
for (int i = 0; i < flightDataFiles.length; i++) {
System.out.println("第"+i+"对象个数:"+flightDataFiles[i].getName());
File flightDataFile = flightDataFiles[i];
if (flightDataFile.exists() && flightDataFile.isFile()
&& flightDataFile.getName().lastIndexOf(".xls") > 0
&& DateUtil.isValidDate(flightDataFile.getName().substring(0, 8))) {
List<FlightData> fdList = DisposeFlightData
.parseExcelToFlightData(flightDataFile);
List<FlightData> addfdList = new ArrayList<FlightData>();
for (int j = 0; j < fdList.size(); j++) {
System.out.println(flightDataFiles[i].getName()+j);
FlightData fd = fdList.get(j);
FlightData data = flightDataDao.findFlightData(fd);
if (data == null) {
addfdList.add(fd);
}
//批量处理添加,每1000条保存一次
if(addfdList.size()%1000==0||j==fdList.size()-1){
flightDataDao.addFdList(addfdList);
// flightDataDao.addFdList(fdList);
addfdList.clear();
}
}
} else {
String newPath = "E:/Reject";
FileOperate.newFolder(newPath);
FileOperate.moveFile(flightDataFile.getPath(),
newPath + "/" + flightDataFile.getName());
}
}
}
解析excel数据到实体类
package cn.com.acca.sams.sales.test; import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet; import cn.com.acca.sams.common.utils.XlsReader;
import cn.com.acca.sams.sales.domainmodel.FlightData; /**
*
* 航班数据解析入库.
*
* @author Yan jianjun
* @since 2015-09-14
*/
public class DisposeFlightData { /**
* 解析excel航班数据设置到FlightData对象中
*
* @param file
* @return
*/ public static List<FlightData> parseExcelToFlightData(File file) {
XlsReader xlsReader = XlsReader.loadXls(file.getPath());
HSSFSheet sheet = null;
HSSFRow row = null; String fileName = file.getName();// forexample:20150601MUD.xls,20150601MUI.xls
// 接口文件名 ,东航航班数据文件的文件名
String interfaceFile = fileName; fileName = fileName.split("\\.")[0]; SimpleDateFormat sdf = new SimpleDateFormat(DateUtil.DATEFORMAT2);
Date date = new Date(); List<FlightData> flightDataList = new ArrayList<FlightData>();
for (int i = 0; i < xlsReader.getSheets(); i++) {
sheet = xlsReader.getSheetBySheetNo(i);
// System.out.println("总行数---》" + (sheet.getPhysicalNumberOfRows() - 1));
// 这里j从1开始,即从第二行起,因为第一行是属性名,不用读取。
for (int j = 1; j < sheet.getPhysicalNumberOfRows(); j++) {
// for (int j = 33955; j < sheet.getPhysicalNumberOfRows(); j++) {
row = sheet.getRow(j);
// 判断如果第一列为空不处理
if (row.getCell(0).getStringCellValue() != null
&& !"".equals(row.getCell(0).getStringCellValue())) { FlightData flightData = new FlightData();
// flightData.setFlightDate(Long.valueOf(flightDate));
// flightData.setMarketCarrier(marketCarrier);
flightData.setFileName(interfaceFile);
// flightData.setDiInd(DI);
// flightData.setInterfaceDate(interfaceDate);
flightData.setCreatedDate(date); setValueToFlightData(flightData, row);
flightDataList.add(flightData);
}
}
} return flightDataList;
} /**
* 将一行航班数据设置到FlightData对象中
*
* @param row
*/
private static void setValueToFlightData(FlightData flightData, HSSFRow row) {
HSSFCell cell = null;
//设置航班日期
String flightDate = row.getCell(0).getStringCellValue().replace("-", "");
// if(flightDate.equals("20150919")&&row.getCell(2).getStringCellValue().equals("7158")){
// System.out.println(row.getCell(10).getStringCellValue());
// }
flightData.setFlightDate(Long.valueOf(flightDate));
//承运人
String operateCarrier = row.getCell(1).getStringCellValue();
flightData.setOperateCarrier(operateCarrier); // 设置航班号
cell = row.getCell(2);
// flightData.setMarketFlightNo(filterString(cell.getStringCellValue().replaceAll("CES", "MU")));
flightData.setOperateFlightNo(operateCarrier+cell.getStringCellValue());
// 设置飞机注册号
cell = row.getCell(3);
flightData.setAircraftRegistrationNo(cell.getStringCellValue());
// 设置机型
// cell = row.getCell(2);
// flightData.setAirCraft(cell.getStringCellValue());
//性质
cell = row.getCell(4);
flightData.setProperty(cell.getStringCellValue());
// 设置起飞地
cell = row.getCell(6);
flightData.setDepartureStation(cell.getStringCellValue());
//计划起飞站
cell = row.getCell(7);
flightData.setPlannedAepartureStation(cell.getStringCellValue());
// 计算后的最终日期
Date finalDate = null;
// 计飞
cell = row.getCell(8);
finalDate = calDate(flightDate, cell);
if (finalDate != null) {
flightData.setPlannedDepartureDate(finalDate);
}
//关舱门日期
cell = row.getCell(9);
finalDate = calDate(flightDate, cell);
if (finalDate != null) {
flightData.setCloseDoorDate(finalDate);
}
// 实飞
cell = row.getCell(10);
finalDate = calDate(flightDate, cell);
if (finalDate != null) {
flightData.setActualDepartureDate(finalDate);
} //到站
cell = row.getCell(11);
flightData.setArrivalStation(cell.getStringCellValue()); // 计划到达站
cell = row.getCell(12);
flightData.setPlannedArrivalStation(cell.getStringCellValue());
//计划到达日期,时间
cell = row.getCell(13);
finalDate = calDate(flightDate, cell);
if (finalDate != null) {
flightData.setPlannedArrivalDate(finalDate);
}
//实际降落(到达)日期,时间 实到
cell = row.getCell(14);
finalDate = calDate(flightDate, cell);
if (finalDate != null) {
flightData.setActualArrivalDate(finalDate);
} // // 预飞
// cell = row.getCell(5);
// finalDate = calDate(flightDate, cell);
// if (finalDate != null) {
// flightData.setEstimateUplDate(finalDate);
// } //统计原因
cell = row.getCell(17);
flightData.setStatiscalReason(cell.getStringCellValue()); // 备注
cell = row.getCell(22);
flightData.setRemarks(cell.getStringCellValue()); } /**
* 计算(计飞、预飞、实飞)日期,根据单元格中时间的后缀,计算(计飞、预飞、实飞)的日期是航班日期的前一天、后一天、当天。
* @param flightDate 航班日期
* @param cell (计飞、预飞、实飞)时间单元格
* @return
*/
private static Date calDate(String flightDate, HSSFCell cell) {
String cellValue = cell.getStringCellValue();
if (cellValue != null && !"".equals(cellValue)) {
String time = cellValue.substring(0, 4);
Date date = null;
if (cellValue.lastIndexOf("-") > 0) {
date = DateUtil.getBeforeDay(DateUtil.strToDate(flightDate + time, DateUtil.DATEFORMAT1));
} else if (cellValue.lastIndexOf("+") > 0) {
date = DateUtil.getAfterDay((DateUtil.strToDate(flightDate + time, DateUtil.DATEFORMAT1)));
} else {
date = DateUtil.strToDate(flightDate + time, DateUtil.DATEFORMAT1);
}
return date;
}
return null;
} /**
* 过滤特殊字符
*
* @param str
* @return
* @throws PatternSyntaxException
*/
private static String filterString(String str) throws PatternSyntaxException {
// 只允许字母和数字 String regEx ="[^a-zA-Z0-9]";
// 清除掉所有特殊字符
String regEx = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.replaceAll("").trim();
} public static void main(String[] args) { // long startTime = System.currentTimeMillis(); // 获取开始时间
//
// // 接收的文件所在目录
// String fileDir = "F:/Accpet";
// File file = new File(fileDir);
// File[] flightDataFiles = file.listFiles();
// System.out.println("该目录下对象个数:" + flightDataFiles.length);
// // 循环目录下的文件
// for (int i = 0; i < flightDataFiles.length; i++) {
// if (flightDataFiles[i].isFile()) {
// File flightDataFile = flightDataFiles[i];
// System.out.println("文 件--》:" + flightDataFile);
// List<FlightData> fdList = parseExcelToFlightData(flightDataFile);
// for (int j = 0; j < fdList.size(); j++) {
// FlightData fd = fdList.get(j);
// System.out.println(j + "<----->" + fd.toString());
// }
// }
// }
//
// long endTime = System.currentTimeMillis(); // 获取结束时间
// long totalTime = endTime - startTime;
// System.out.println("程序运行时间: " + totalTime + "ms"); } }
将session中的实体保存导数据库中
/* (non-Javadoc)
* @see cn.com.acca.sams.sales.dao.FlightDataDao#addFdList(java.util.List)
*/
@Override
public void addFdList(List<FlightData> addfdList) {
// TODO Auto-generated method stub for(int i = 0;i<addfdList.size();i++){
System.out.println("添加"+i);
super.add(addfdList.get(i));
}
// super.add(addfdList);
super.getEm().flush();//提交session中的对象到数据库中
super.getEm().clear();//清除session对象,由托管状态变为游离态
}
上传excel数据到数据库中的更多相关文章
- .net导入excel数据到数据库中
在开发过程中我们经常面临着需要将数据导出或者导入到系统中,例如一些生产管理系统,项目管理系统等等都会有这样的需求: 将excel数据到系统中思路:获取excel中每一行的数据,然后存入集合中,批量添加 ...
- SpringMVC 实现POI读取Excle文件中数据导入数据库(上传)、导出数据库中数据到Excle文件中(下载)
读取Excale表返回一个集合: package com.shiliu.game.utils; import java.io.File; import java.io.FileInputStream; ...
- MVC4.0 上传Excel并存入数据库
这里的这个功能实现在WebForm很好实现,上传阶段简单的一个FileUoLoad控件就搞定了,什么取值,什么上传都是浮云,微软都帮我们封装好了,我们只需要一拖一拽就OK了,但这些在MVC中是不行的! ...
- jQuery+php+ajax+PHPExcel实现上传excel文件导入数据库
项目中需要批量导入数据,感觉这个需求以后也会经常用,必须总结分享下: 引入jquery的第三方表单插件: <scripttype="text/javascript&qu ...
- PHPExcel实现上传excel文件导入数据库
项目中需要批量导入数据,感觉这个需求以后也会经常用,必须总结分享下: 引入jquery的第三方表单插件: <scripttype="text/javascript&qu ...
- MYSQL 导入Excel数据到数据库中
1,先把excel的数据整理整齐,如每列都要保持同样的格式:就一列一列的数据: 2,导出excel的数据为CSV格式,即把excel的数据另存为xxxx.csv;: 3,用EditPlus工具将xxx ...
- c# 上传excel数据总结(一)线程的使用
1: 因为程序涉及到上传,开始暂停,继续,删除, thread 在老版本用使用th.Abort(); th.Resume(); 停止 恢复 th.Suspend(); 挂起 猛的一看挺合适啊..但微 ...
- 【WPF学习笔记】之如何保存画面上新建的数据到数据库中并且删除画面上的数据和数据库的数据:动画系列之(五)
...... 承接系列四后续: 首先,我要在用户控件2中添加“保存”,“删除”按钮. XAML代码: <UserControl x:Class="User.uc_item" ...
- Uploadify上传Excel到数据库
前两章简单的介绍了Uploadify上传插件的基本使用和相关的属性说明.这一章结合Uploadify+ssh框架+jquery实现Excel上传并保存到数据库. 以前写的这篇文章 Jq ...
随机推荐
- mysql python中的pymysql模块使用
import pymysql # 在这之前需要给mysql授登录权限 grant all on "; 否则会导致连接时出错 # flush privileges; #创建连接 conn = ...
- 如何使用通用pe工具箱破解开机密码
下载最新版的通用pe工具箱将u盘制作成启动盘,接着重启连续按热键进入到bios系统下,设置u盘为第一启动,保存重启. 1.这时候会进入通用pe工具箱的选择界面,我们选择第八个“运行Windows登陆密 ...
- Python环境搭建—安利Python小白的Python安装详细教程
人生苦短,我用Python.众所周知,Python目前越来越火,学习Python的小伙伴也越来越多.最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了 ...
- Centos/RHEL :How to add,delete and display LVM tags
1. 什么是LVM标签? 在你想开机启动时让逻辑卷被激活可用时,添加lvm标签是一个不错的选择.lvm标签允许那些被预先标记的实现这样的效果. 2. 配置文件 配置文件/etc/lvm/lvm.con ...
- Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等
一.用户创建.权限.删除 1.连接MySql操作 连接:mysql -h 主机地址 -u 用户名 -p 用户密码 (注:u与root可以不用加空格,其它也一样) 断开:exit (回车) 打开cmd, ...
- UITableViewCell的prepareForReuse方法
cell被重用怎样提前知道? 重写cell的prepareForReuse官方头文件里有说明.当前已经被分配的cell假设被重用了(一般是滚动出屏幕外了),会调用cell的prepareForReus ...
- (一一〇)正則表達式的基本使用与RegexKitLite的使用
正則表達式经常常使用于匹配keyword,以下先介绍基本的语法. [基本的语法] ①中括号表示满足当中之中的一个就可以,比如[abc],则这个位置能够是a.b.c中随意一个. ②在中括号里,能够通过- ...
- 【java】itoo项目实战之大数据查询之使用 new map 优化hibernate之级联查询
在我的上一篇博客<[java]itoo项目实战之hibernate 懒载入优化性能>中,我曾提到过学生数据有2万条,查询数据十分的慢,这是让人非常受不了的事情.看着页面进度条一直转着圈圈, ...
- vim插件之ack
这个插件其实是实现vim内部搜索功能的今天在学习vim搜索的时候,遇到了一个ack.vim的插件,这个插件给我们提供了一个并行于系统命令grep的搜索命令Ack 它的下载地址是 https://git ...
- 57.C++处理转义字符
#include <iostream> #include <string> #include <cstdlib> using namespace std; void ...