国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

JSP上傳excel及excel插入至數據庫的方法

2020-07-27 21:30:30
字體:
來源:轉載
供稿:網友

本文實例講述了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("http://");     //截取 上傳文件的 字符串名字,加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<?> 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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安庆市| 视频| 南京市| 象州县| 美姑县| 上高县| 康平县| 丰县| 长丰县| 灵川县| 枣阳市| 游戏| 彭山县| 安阳市| 瓦房店市| 陈巴尔虎旗| 如东县| 乌鲁木齐县| 麟游县| 眉山市| 托克逊县| 莎车县| 赤城县| 泰安市| 兴业县| 布拖县| 孟州市| 宁南县| 神农架林区| 乌恰县| 淅川县| 建宁县| 南川市| 竹溪县| 鹰潭市| 万安县| 贡嘎县| 工布江达县| 和龙市| 灵川县| 陵川县|