大炮同学 2014-08-21 12:54 采纳率: 0%
浏览 2948

求完整的JSP页面上传excel 将数据导入数据库的代码

找的的代码都会各种报错
上传的jsp页面的action要指向哪个文件?

  • 写回答

2条回答 默认 最新

  • WorldMobile 2015-11-05 08:35
    关注
     这篇文章主要介绍了JSP上传excel及excel插入至数据库的方法,涉及JSP文件上传及针对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程序设计有所帮助。
    
    
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?