java 处理上传exl数据 并导入数据库
思路:处理上传exl表格,并读取文件,数据,讲数据放去集合,循环插入数据库。
重点,读取文件时需要读数据,格式和数据是否正确,(因为只是把整条路打通,所以这块没有细弄);
项目使用ssm框架,
struts:
<action name="uploadExcel" class="com.payment.action.PaymentAction" method="uploadExcel">
<result>/center/uploadExcel.ftl</result>
</action>
action:
public String uploadExcel(){
boolean ret = false;
try{
if(excel == null){
this.getRequest().setAttribute("message", "请选择一个Excel文件!");
}else{
ret = paymentBo.excelToAps(excel,excel_type);
if(!ret){
this.getRequest().setAttribute("message", "Excel添加失败,请确定格式是否正确!");
}else{
this.getRequest().setAttribute("message", "添加成功");
}
}
}catch(Exception e){
e.printStackTrace();
}
return success;
}
dao:
public boolean excelToAps(File file,String type ) throws Exception {
System.out.println("paymentBo.excelToAps进入");
try {
Workbook workbook = getWeebWork(type,file);
Sheet sheet = workbook.getSheetAt(0);
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
int rownum = sheet.getLastRowNum();// 获取总行数
int minRowIx = sheet.getFirstRowNum();
int maxRowIx = sheet.getLastRowNum();
List<String> list = new ArrayList<String>(); //测试存放数据的list
List<PaymentDataVo> listPayment = new ArrayList<PaymentDataVo>();//将exl中的数据提取后存放的list
System.out.println("rownum:"+rownum+"minRowIx:"+minRowIx+",maxRowIx:"+maxRowIx);
for (int rowIx = 1; rowIx <= maxRowIx; rowIx++) {
Row row = sheet.getRow(rowIx);
StringBuilder sb = new StringBuilder();
short minColIx = row.getFirstCellNum();
short maxColIx = row.getLastCellNum();
PaymentDataVo payvoDataVo =new PaymentDataVo();
//System.out.println("minColIx:"+minColIx+"maxColIx:"+maxColIx );
System.out.print("第"+rowIx+"行数据:");
for (short colIx = 0; colIx < maxColIx; colIx++) {
Cell cell = row.getCell(new Integer(colIx));
CellValue cellValue = evaluator.evaluate(cell);
/******/
DecimalFormat df = new DecimalFormat("######0.00");
if(colIx == 0){//日期
String date =cellValue.getNumberValue()+"" ;
System.out.print(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(cell.getDateCellValue())+",");
payvoDataVo.setCreateTime(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(cell.getDateCellValue()));
}else if(colIx== 1){//卡类
System.out.print((int)cellValue.getNumberValue()+",");
payvoDataVo.setPaymentId((int)cellValue.getNumberValue());
}else if(colIx == 2){//消费类型
System.out.print((int)cellValue.getNumberValue()+",");
//payvoDataVo.setConsumprionId(cellValue.getNumberValue());
}else if(colIx == 3){//明细类型
System.out.print(cellValue.getStringValue()+",");
payvoDataVo.setDataType(cellValue.getStringValue());
}else if(colIx == 4){//消费简述
System.out.print(cellValue.getStringValue()+",");
payvoDataVo.setDataName(cellValue.getStringValue());
}else if(colIx == 5){//消费金额
System.out.print(df.format(cellValue.getNumberValue()));
payvoDataVo.setDataAMT(Double.parseDouble(df.format(cellValue.getNumberValue())));
}else if(cellValue.getCellType()==0){
break;
}
/***此处代码为网络摘录****/
// if (cellValue == null) {
// continue;
// }
// // 经过公式解析,最后只存在Boolean、Numeric和String三种数据类型,此外就是Error了
// // 其余数据类型,根据官方文档,完全可以忽略http://poi.apache.org/spreadsheet/eval.html
// switch (cellValue.getCellType()) {
// case Cell.CELL_TYPE_BOOLEAN:
// sb.append(SEPARATOR + cellValue.getBooleanValue());
// break;
// case Cell.CELL_TYPE_NUMERIC:
// // 这里的日期类型会被转换为数字类型,需要判别后区分处理
// if (DateUtil.isCellDateFormatted(cell)) {
// sb.append(SEPARATOR + cell.getDateCellValue()+"---");
// } else {
// sb.append(SEPARATOR + cellValue.getNumberValue()+"+++");
// }
// break;
// case Cell.CELL_TYPE_STRING:
// sb.append(SEPARATOR + cellValue.getStringValue());
// break;
// case Cell.CELL_TYPE_FORMULA:
// break;
// case Cell.CELL_TYPE_BLANK:
// break;
// case Cell.CELL_TYPE_ERROR:
// break;
// default:
// break;
// }
}
System.out.println();
list.add(sb.toString());
listPayment.add(payvoDataVo);
}
paymentDao.addPaymentDataVos(listPayment);
} catch (Exception e) {
return false;
//e.printStackTrace();
}
return true;
}
mybatis:
<insert id="addPaymentDataVos" parameterType="java.util.List" >
INSERT into payments_data VALUES <foreach collection="list" item="item" index="index" separator="," >
(null,#{item.createTime},#{item.paymentId},#{item.consumprionId},#{item.dataType},#{item.dataName},#{item.dataAMT})
</foreach>
</insert>
有问题会再跟进的!
java 处理上传exl数据 并导入数据库的更多相关文章
- 使用ocupload和POI一键上传Excel并解析导入数据库
使用的工具如下: JQuery ocupload jquery.ocupload-1.1.2.js Apache POI poi-3.9.jar 如果是Maven项目添加依赖如下: <depe ...
- jsp上传excel文件并导入数据库
1,excel文件的上传 需要借助jar包:commons-fileupload-1.2.1.jar以及commons-io-1.3.2.jar 前端的html文件 <form id=" ...
- springmvc04-文件上传-JSON数据
文件上传部分: 1, 导入commons-fileupload-1.2.2.jar commons-io-2.4.jar 两个jar包. 2, 在主配置文件中,添加如下信息 <!-- 文件上传- ...
- java文件上传-使用apache-fileupload组件
目前文件上传的(框架)组件:Apache----fileupload .Orialiy – COS – 2008() .Jsp-smart-upload – 200M. 用fileupload上传文件 ...
- Java实现Excel数据批量导入数据库
Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...
- 小兔Java教程 - 三分钟学会Java文件上传
今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...
- 2013第38周日Java文件上传下载收集思考
2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...
- java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载
java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载 实现功能:zip文件上传,后台自动解压,Jstree树目录(遍历文件),editor.md预览 采用Spring+Sp ...
- Thinkphp5+PHPExcel实现批量上传表格数据功能
http://www.jb51.net/article/129262.htm 1.首先要下载PHPExcel放到vendor文件夹下,我的路径是:项目/vendor/PHPExcel/,把下载的PHP ...
随机推荐
- 吴恩达课后作业学习2-week1-1 初始化
参考:https://blog.csdn.net/u013733326/article/details/79847918 希望大家直接到上面的网址去查看代码,下面是本人的笔记 初始化.正则化.梯度校验 ...
- C语言初学者关于数组指针的深度讨论
一.什么是数组指针? 即是数组的指针.首先它是一个指针,指向数组,指针本身占4个字节. 二.数组指针的使用 int a[3][5]; int (*p)[5]; p=&a; 第二行定义了一个数组 ...
- 环境部署(一):Linux下安装JDK
自动化测试的主要目的是为了执行回归测试.当然,为了模拟真实的用户操作,一般都是在UAT或者生产环境进行回归测试. 为了尽量避免内网和外网解析对测试结果的影响,将自动化测试服务部署在外网的服务器是比较好 ...
- 不可变对象和Biulder模式(面试问题)
String就是一个典型的不可变对象.外界的操作不能改变它,如果尝试改变都会返回一个新的String对象. 具体实现起来就是把属性全部变成private 和 final的,这个类也是final的不可继 ...
- face recognition[Euclidean-distance-based loss][Center Face]
本文来自<A Discriminative Feature Learning Approach for Deep Face Recognition>,时间线为2016年.采用的loss是C ...
- Unity编辑器:清空控制台(Console)
static MethodInfo clearMethod = null; /// <summary> /// 清空log信息 /// </summary> private s ...
- 热泪盈眶的五十岁 | James Altucher
我是一名程序员,但我不爱看技术博客,因为要吸取知识点,看源代码.官方文档和书永远比看技术博客要好.对于博客这种偏碎片的媒介,我倾向于看一些短小精炼.有一点深度的叙述,Altucher刚好符我目前的品味 ...
- Linux:一位猫奴的意外逆袭
作者:Vamei,严禁任何形式转载. 1991年年中,林纳斯·托瓦兹(Linus Torvalds)在自己房间里敲着键盘.他全神贯注地盯着14寸的黑色屏幕,都没感觉到自己的小猫Randi在扒自己的裤腿 ...
- 15-分析Ajax请求并抓取今日头条街拍美图
流程框架: 抓取索引页内容:利用requests请求目标站点,得到索引网页HTML代码,返回结果. 抓取详情页内容:解析返回结果,得到详情页的链接,并进一步抓取详情页的信息. 下载图片与保存数据库:将 ...
- Mike and strings CodeForces - 798B (又水又坑)
题目链接 题意:英语很简单,自己取读吧. 思路: 既然n和i字符串的长度都很小,最大才50,那么就是只要能出答案就任意暴力瞎搞. 本人本着暴力瞎搞的初衷,写了又臭又长的200多行(代码框架占了50行) ...