我是靠谱客的博主 整齐黑夜,这篇文章主要介绍JSP上传excel及excel插入至数据库的方法,现在分享给大家,希望可以做个参考。

本文实例讲述了JSP上传excel及excel插入至数据库的方法。分享给大家供大家参考。具体如下:

此导入excel是与pojo绑定的,(缺点)excle表头必须是pojo的字段值

1. html页面:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<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代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
@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代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
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<?> exportListFromExcel(File file, String fileFormat,Object dtoobj) throws IOException { return exportListFromExcel(new FileInputStream(file), fileFormat,dtoobj); } /** * 方法描述:由Excel流的Sheet导出至List * @param is * @param extensionName * @param sheetNum * @return * @throws IOException * @author * @date 2013-3-25 下午10:44:03 * @comment */ public static List<?> exportListFromExcel(InputStream is,String fileFormat,Object dtoobj) throws IOException { Workbook workbook = null; if (fileFormat.equals(BizConstant.XLS)) { workbook = new HSSFWorkbook(is); } else if (fileFormat.equals(BizConstant.XLSX)) { workbook = new XSSFWorkbook(is); } return exportListFromExcel(workbook,dtoobj); } /** * 方法描述:由指定的Sheet导出至List * @param workbook * @param sheetNum * @return * @author * @date 2013-3-25 下午10:43:46 * @comment */ private static List<Object> exportListFromExcel(Workbook workbook ,Object dtoobj) { List<Object> list = new ArrayList<Object>(); String[] model = null; Sheet sheet = workbook.getSheetAt(0); // 解析公式结果 FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); int minRowIx = sheet.getFirstRowNum(); int maxRowIx = sheet.getLastRowNum(); for (int rowIx = minRowIx; rowIx <= maxRowIx; rowIx++) { Object obj = null; if(rowIx==minRowIx){ start = sheet.getRow(rowIx).getFirstCellNum(); end = sheet.getRow(rowIx).getLastCellNum(); } Row row = sheet.getRow(rowIx); StringBuilder sb = new StringBuilder(); for (int i = start; i < end; i++) { Cell cell = row.getCell(new Integer(i)); CellValue cellValue = evaluator.evaluate(cell); if (cellValue == null) { sb.append(BizConstant.SEPARATOR+null); continue; } // 经过公式解析,最后只存在Boolean、Numeric和String三种数据类型,此外就是Error了 // 其余数据类型,根据官方文档,完全可以忽略 switch (cellValue.getCellType()) { case Cell.CELL_TYPE_BOOLEAN: sb.append(BizConstant.SEPARATOR + cellValue.getBooleanValue()); break; case Cell.CELL_TYPE_NUMERIC: // 这里的日期类型会被转换为数字类型,需要判别后区分处理 if (DateUtil.isCellDateFormatted(cell)) { sb.append(BizConstant.SEPARATOR + cell.getDateCellValue()); } else { sb.append(BizConstant.SEPARATOR + cellValue.getNumberValue()); } break; case Cell.CELL_TYPE_STRING: sb.append(BizConstant.SEPARATOR + cellValue.getStringValue()); break; case Cell.CELL_TYPE_FORMULA: break; case Cell.CELL_TYPE_BLANK: break; case Cell.CELL_TYPE_ERROR: break; default: break; } } if(rowIx==minRowIx){ String index = String.valueOf(sb); String realmodel =index.substring(1, index.length()); model =realmodel.split(","); }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程序设计有所帮助。

最后

以上就是整齐黑夜最近收集整理的关于JSP上传excel及excel插入至数据库的方法的全部内容,更多相关JSP上传excel及excel插入至数据库内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(153)

评论列表共有 0 条评论

立即
投稿
返回
顶部