上传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. windows server,无桌面服务器 , 批处理更改时区

    windows server,无桌面服务器 , 批处理更改时区 time /t cmd.exe /c Control.exe TIMEDATE.CPL,,/Z "China Standard ...

  2. JS之预编译和执行顺序(全局和函数)

    预编译的两种情况 全局: 1.全局 直接是script标签中的代码,不包括函数执行 执行前: 1.首先生成一个GO(global object)对象,看不到,但是可以模拟出来用来分析 2.分析变量声明 ...

  3. 关于【搭建LAMP环境时,php测试页面打不开】解决

    关于[搭建LAMP环境时,php测试页面打不开]解决 〇.我的测试页面是: http://172.30.124.10/index.php 用火狐打不开,如下图. 一.httpd已经启动了(system ...

  4. android应用开发-从设计到实现 3-9 Origami动态原型设计

    动态原型设计 动态的可交互原型产品,是产品经理和界面设计师向开发人员阐释自己设计的最高效工具. 开发人员不须要推測设计师要什么样的效果,照着原型产品做就好了. 非常多创业团队也发现了产品人的这个刚需, ...

  5. 压缩感知——SP(subspace pursuit)重构算法前言翻译

    压缩感知是一种採样方法,它和变换编码类似,后者被广泛用于涉及到大规模数据採样的现代通信系统中.变换编码将高维空间中的输入信号.转换成很低的低维空间中的信号.变换编码器的样例有著名的小波变换和普遍存在的 ...

  6. 在oracle存储过程中创建暂时表

    在oracle的存储过程中,不能直接使用DDL语句,比方create.alter.drop.truncate等. 那假设我们想在存储过程中建立一张暂时表就仅仅能使用动态sql语句了: create o ...

  7. js实现删除确认提示框

    js实现删除确认提示框 一.实例描述 防止用户小心单击了“删除”按钮,在用户单击“删除”按钮后,给出一个提示,让用户确认此次操作是否正确. 二.效果 三.代码 <!DOCTYPE html> ...

  8. OpenCV —— 矩阵和图像操作

    cvAbs , cvAbsDiff , cvAbsDiffS cvAdd , cvAddS , cvAddWeighted(可添加权重) #include <cv.h> #include ...

  9. 经典的横线中间文字css布局---flex布局

    html: <div class="title"> <div class="line"></div> <div cla ...

  10. 00084_Map接口

    1.Map接口概述 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同. (1)Collection中的集合,元素是孤立存在的(理解为单身),向集 ...