上传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 ...
随机推荐
- h5语音播放(移动端)
<!--语音导航 start--> <div style="border:0px solid red;width:100%;height:72px;position:rel ...
- webpack03
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- FTP配置说明
1.下载rpm包,如vsftpd-3.0.2-21.el7.x86_64.rpm.可在系统盘里面找到或者下载 2.参考如下步骤.或者见链接http://blog.csdn.net/uq_jin/art ...
- HDU 2435 There is a war Dinic 最小割
题意是有n座城市,n号城市不想让1号城市可达n号,每条道路有一条毁坏的代价,1号还可以修一条不能毁坏的道路,求n号城市所需的最小代价最大是多少. 毁坏的最小代价就直接求一遍最大流,就是最小割了.而可以 ...
- 关于servlet的web.xml映射
1.原理 <servlet> <!-- servlet的名字,随便起个名,但和下面的servlet名一致 --> <servlet-name>hello</s ...
- tensorflow学习之路---Session、Variable(变量)和placeholder
---恢复内容开始--- 1.Session '''Session.run():首先里面的参数是一个API(函数的接口)的返回值或者是指定参数的值:功能:得知运算结果有两种访问方式:直接建立或者运用w ...
- paste---合并文件的列。
Linux paste命令用于合并文件的列. paste指令会把每个文件以列对列的方式,一列列地加以合并. 语法 paste [-s][-d <间隔字符>][--help][--versi ...
- 【Henu ACM Round#17 B】USB Flash Drives
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 排序,逆序.贪心选较大的就好. [代码] #include <bits/stdc++.h> #define ll lon ...
- 关于Shiro的退出请求是如何关联到登录请求的思考
一.结论 先给出结论,是因为本身是很简单的道理.假设我们没有使用任何认证授权的框架,就简单的使用Cookie和HttpSession,那么用户登录后的每一个请求是如何关联上这个用户的呢?答案很简单,由 ...
- iOS项目开发实战——iOS网络编程获取网页Html源码
现在我们身处互联网的时代.不论什么一个软件或是App,都会或多或少与网络打交道,并不断发生数据交互.一个没有涉及网络编程的应用会显得比較low,这里我们将会開始使用Swift开发iOS应用,而且主要来 ...