本文实例讲述了JSP上传excel及excel插入至数据库的方法。分享给大家供大家参考。具体如下:
此导入excel是与pojo绑定的,(缺点)excle表头必须是pojo的字段值
1. html页面:
<form id="myform" method="post" enctype="multipart/form-data"> <table> <tr> <td></td> <td> <input type="file" name="filepath" id="filepath" class="easyui-validatebox" required=true validType="equalLength[4]" missingMessage="文件!" value="" /> </td> </tr> <tr align="center"> <td colspan="2"> <a id="btn1" class="easyui-linkbutton" data-options="iconCls:'icon-ok'" style="width: 60px" onclick="subForm();">OK</a> <a id="btn2" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" style="width: 60px" onclick="closeDig();">Cancel</a> </td> </tr> </table> </form> <script type="text/javascript"> function subForm(){ if($('#myform').form('validate')){ /** var filepath = $("#filepath").val(); alert(filepath); $.ajax({ url: 'excleImport', typs: "post", data: {"filepath":filepath}, async: false, error: function(request) { $('#dg').datagrid('reload'); closeDig(); $.messager.alert("操作提示", "操作成功!","info"); }, success: function(data) { alert("success"); } }); **/ var filepath = $("#filepath").val(); var re = /(\\+)/g; var filename = filepath.replace(re,"#"); //对路径字符串进行剪切截取 var one = filename.split("#"); //获取数组中最后一个,即文件名 var two = one[one.length-1]; //再对文件名进行截取,以取得后缀名 var three = two.split("."); //获取截取的最后一个字符串,即为后缀名 var last = three[three.length-1]; //添加需要判断的后缀名类型 var tp = "xls,xlsx"; //返回符合条件的后缀名在字符串中的位置 var rs = tp.indexOf(last); if(rs != -1){ $("#myform").attr("action","excleImport"); $("#myform").submit(); }else{ $.messager.alert("操作提示", "您选择的上传文件不是有效xls或者xlsx文件!","error"); return false; } } else { $.messager.alert("操作提示", "请选择上传文件!","error"); } } </script>
2. java代码:
@RequestMapping("/excleImport") public void excleImport(HttpServletRequest request) throws IOException, Exception { request.setCharacterEncoding("utf-8"); //设置编码 //获得磁盘文件条目工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //获取文件需要上传到的路径 String path = request.getRealPath("/upload/kaku"); File uploadDir = new File(path); if (!uploadDir.exists()) { uploadDir.mkdirs(); } factory.setRepository(uploadDir); //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室 factory.setSizeThreshold(1024*1024) ; //高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory); //可以上传多个文件 List<FileItem> list = (List<FileItem>)upload.parseRequest(request); for(FileItem item : list) { //获取表单的属性名字 String name = item.getFieldName(); //如果获取的 表单信息是普通的 文本 信息 if(item.isFormField()) { //获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的 String value = item.getString() ; request.setAttribute(name, value); } //对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些 else { /** * 以下三步,主要获取 上传文件的名字 */ //获取路径名 String value = item.getName() ; //索引到最后一个反斜杠 int start = value.lastIndexOf("\\"); //截取 上传文件的 字符串名字,加1是 去掉反斜杠, String filename = value.substring(start+1); //文件后缀名 String prefix = filename.substring(filename.lastIndexOf(".") + 1); CardCenter cardCenter = new CardCenter(); request.setAttribute(name, filename); //真正写到磁盘上 //它抛出的异常 用exception 捕捉 //item.write( new File(path,filename) );//第三方提供的 //手动写的 //OutputStream out = new FileOutputStream(new File(path,filename)); InputStream in = item.getInputStream() ; List<CardCenter> listFromExcel = (List<CardCenter>)ExelUtil.exportListFromExcel(in, prefix, cardCenter); this.cardCenterService.excleImport(listFromExcel); /*int length = 0 ; byte [] buf = new byte[1024] ; System.out.println("获取上传文件的总共的容量:"+item.getSize()); // in.read(buf) 每次读到的数据存放在 buf 数组中 while( (length = in.read(buf) ) != -1) { //在 buf 数组中 取出数据 写到 (输出流)磁盘上 out.write(buf, 0, length); } */ in.close(); //out.close(); } } }
3. java代码:
public class ExelUtil { //第一列开始 private static int start = 0; //最后一列序号 private static int end =0; public static String getSubString(String str){ return str.substring(0,str.lastIndexOf(".")); } /** * 方法描述:由Excel文件的Sheet导出至List * @param file * @param sheetNum * @return * @throws IOException * @author * @date 2013-3-25 下午10:44:26 * @comment */ public static List<","); }else{ String index = String.valueOf(sb); String realvalue =index.substring(1, index.length()); String[] value =realvalue.split(","); //字段映射 try { dtoobj =dtoobj.getClass().newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } obj = reflectUtil(dtoobj,model,value); list.add(obj); } } return list; } /** * 方法描述:字段映射赋值 * @param objOne * @param listName * @param listVales * @return * @author * @date 2013-3-25 下午10:53:43 * @comment */ @SuppressWarnings("deprecation") private static Object reflectUtil(Object objOne, String[] listName, String[] listVales) { Field[] fields = objOne.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { fields[i].setAccessible(true); for (int j = 0; j < listName.length; j++) { if (listName[j].equals(fields[i].getName())) { try { if (fields[i].getType().getName().equals(java.lang.String.class.getName())) { // String type if(listVales[j]!=null){ fields[i].set(objOne, listVales[j]); }else{ fields[i].set(objOne, ""); } } else if (fields[i].getType().getName().equals(java.lang.Integer.class.getName()) || fields[i].getType().getName().equals("int")) { // Integer type if(listVales[j]!=null){ fields[i].set(objOne, (int)Double.parseDouble(listVales[j])); }else{ fields[i].set(objOne, -1); } }else if(fields[i].getType().getName().equals("Date")){ //date type if(listVales[j]!=null){ fields[i].set(objOne, Date.parse(listVales[j])); } }else if(fields[i].getType().getName().equals("Double") ||fields[i].getType().getName().equals("float")){ //double if(listVales[j]!=null){ fields[i].set(objOne, Double.parseDouble(listVales[j])); }else{ fields[i].set(objOne, 0.0); } } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } break; } } } return objOne; } }
希望本文所述对大家的JSP程序设计有所帮助。
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月23日
2024年11月23日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]