上传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数据到数据库中的更多相关文章

  1. .net导入excel数据到数据库中

    在开发过程中我们经常面临着需要将数据导出或者导入到系统中,例如一些生产管理系统,项目管理系统等等都会有这样的需求: 将excel数据到系统中思路:获取excel中每一行的数据,然后存入集合中,批量添加 ...

  2. SpringMVC 实现POI读取Excle文件中数据导入数据库(上传)、导出数据库中数据到Excle文件中(下载)

    读取Excale表返回一个集合: package com.shiliu.game.utils; import java.io.File; import java.io.FileInputStream; ...

  3. MVC4.0 上传Excel并存入数据库

    这里的这个功能实现在WebForm很好实现,上传阶段简单的一个FileUoLoad控件就搞定了,什么取值,什么上传都是浮云,微软都帮我们封装好了,我们只需要一拖一拽就OK了,但这些在MVC中是不行的! ...

  4. jQuery+php+ajax+PHPExcel实现上传excel文件导入数据库

            项目中需要批量导入数据,感觉这个需求以后也会经常用,必须总结分享下: 引入jquery的第三方表单插件: <scripttype="text/javascript&qu ...

  5. PHPExcel实现上传excel文件导入数据库

            项目中需要批量导入数据,感觉这个需求以后也会经常用,必须总结分享下: 引入jquery的第三方表单插件: <scripttype="text/javascript&qu ...

  6. MYSQL 导入Excel数据到数据库中

    1,先把excel的数据整理整齐,如每列都要保持同样的格式:就一列一列的数据: 2,导出excel的数据为CSV格式,即把excel的数据另存为xxxx.csv;: 3,用EditPlus工具将xxx ...

  7. c# 上传excel数据总结(一)线程的使用

    1: 因为程序涉及到上传,开始暂停,继续,删除, thread 在老版本用使用th.Abort(); th.Resume(); 停止 恢复  th.Suspend(); 挂起 猛的一看挺合适啊..但微 ...

  8. 【WPF学习笔记】之如何保存画面上新建的数据到数据库中并且删除画面上的数据和数据库的数据:动画系列之(五)

    ...... 承接系列四后续: 首先,我要在用户控件2中添加“保存”,“删除”按钮. XAML代码: <UserControl x:Class="User.uc_item" ...

  9. Uploadify上传Excel到数据库

    前两章简单的介绍了Uploadify上传插件的基本使用和相关的属性说明.这一章结合Uploadify+ssh框架+jquery实现Excel上传并保存到数据库.         以前写的这篇文章 Jq ...

随机推荐

  1. github关联域名,创建个人站点教程终结篇

    1.背景 近期心血来潮,买了一个域名,本来要买fuckgfw的,没想到被抢注了.就拿自己的英文名买了一个.叫做www.garvinli.com.由于知道会有非常多朋友不太清楚整个站点搭建的过程,所以在 ...

  2. HDU 4372 Count the Buildings

    Count the Buildings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  3. IntelliJ IDEA springmvc demo

    construction pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...

  4. drbd脑裂

    环境: Primary    节点:node1Secondary  节点:node2 DRBD产生脑裂的原因:    (1. 采用HA环境的时候自动切换导致脑裂;    (2. 人为操作或配置失误,导 ...

  5. 紫书 例题 9-6 UVa 11400 (线性结构上的动态规划)

    这道题的下标从1开始比较方便,一方面前缀和算的方便一些,一方面涉及到前j 个灯泡,那么如果从0开始,前3个灯泡就是第0, 1, 2, 3个,非常奇怪. 所以灵活换下标. 然后这道题的动规有点暴力枚举的 ...

  6. 封装TensorFlow神经网络

    为了参加今年的软件杯设计大赛,这几个月学习了很多新知识.现在大赛的第二轮作品优化已经提交,开始对这四个月所学知识做一些总结与记录. 用TensorFlow搭建神经网络.TensorFlow将神经网络的 ...

  7. centos下安装redis/mysql等基础环境

    1.修改语言 阿里云的ECS默认语言是:en_US.UTF-8,需要改成zh_CN.UTF-8 修改方法:vim /etc/locale.conf,然后重启. 查看方法:echo $LANG 2.安装 ...

  8. cassandra install - +HeapDumpOnOutOfMemoryError -Xss180k

    原因分析: You are running out of allocted memory for the JAVA VM (128k) is to less. Modify the line belo ...

  9. 数据库范式小结 1NF 2NF BCNF 3NF 4NF DB normal form

    1. 1NF指关系中的每个变量不可再分 2. 2NF指消除了非主属性对码(candidate key)的部分依赖的1NF 比如(S#,C#)-> SN ,(S#,C#)-> SD .S#- ...

  10. 负载均衡(LB)具体解释

    二.LB LoadBalance就是把负载均衡分配到集群的各个节点,从而提高总体的吞吐能力.Oracle 10g RAC提供了两种手段来实现负载,其一是通过Connection Balancing.依 ...