分享

将xls中的数据写入数据库 - 风华少年 - JavaEye技术网站

 suweixin 2011-01-15

将xls中的数据写入数据库

文章分类:Web前端
Upload.jsp代码 复制代码
  1.  <script>   
  2.   
  3.     function callUpload() {   
  4.      var fileValue = document.FileUpload.file1.value;   
  5.      if (fileValue == "") {   
  6.         alert("请选择所需上传的文件!");    
  7.         return false;   
  8.      }   
  9.       showLayer.style.display = "inline";     
  10.      //count()   
  11.      FileUpload.submit();    
  12.        
  13.    }   
  14. </script>   
  15. <body>   
  16. <form  name="FileUpload" method="post" action="uploads" enctype="multipart/form-data" >     
  17.     <table border="0">   
  18.       <tr>   
  19.         <td nowrap>    
  20.           <div align="left">导入的EXCEL文件(导入的明细会复盖原有明细数据):</div>   
  21.         </td>   
  22.       </tr>   
  23.       <tr>   
  24.         <td nowrap>    
  25.         <input type="file" class="mybutton" name="file1" size="50" style="border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px">   
  26.         <input type="submit" class="mybutton" value="导入" name="shangchuan" onClick="return callUpload()" style="border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px" >   
  27.         </td>   
  28.       </tr>    
  29.     </table>   
  30.     <table width="100%">   
  31.         <tr>   
  32.         <td>   
  33.             <hr width="100%">   
  34.         </td>   
  35.       </tr>   
  36.     </table>   
  37.     </form>   
  38. </body>  

 

Upload.java代码 复制代码
  1. protected void doPost(HttpServletRequest request, HttpServletResponse response)   
  2.             throws ServletException, IOException {     
  3.           final long MAX_SIZE = 3 * 1024 * 1024;// 设置上传文件最大为 3M   
  4.           String  u_name="";   
  5.            // 允许上传的文件格式的列表   
  6.           final String[] allowedExt = new String[] { "xls""jpeg""gif""txt",   
  7.              "doc""docx""mp3""wma" };   
  8.           response.setContentType("text/html");   
  9.            // 设置字符编码为UTF-8, 这样支持汉字显示   
  10.           response.setCharacterEncoding("GBK");   
  11.           //实例化RequestContext对象   
  12.           RequestContext requestContext = new ServletRequestContext(request);     
  13.           if(FileUpload.isMultipartContent(requestContext)){}    
  14.           // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload   
  15.           DiskFileItemFactory dfif = new DiskFileItemFactory();     
  16.           //上传文件胡原始路径   
  17.           String  realpath = this.getServletContext().getRealPath("/")+"ImagesUploadTemp" ;   
  18.           // 设置存放临时文件的目录   
  19.           dfif.setRepository(new File(realpath));   
  20.           dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘    
  21.           // 用以上工厂实例化上传组件   
  22.           ServletFileUpload sfu = new ServletFileUpload(dfif);   
  23.           System.err.println(" reapath="+this.getServletContext().getRealPath("/")+"ImagesUploadTemp");   
  24.            // 设置最大上传尺寸   
  25.           sfu.setSizeMax(MAX_SIZE);     
  26.           PrintWriter out = response.getWriter();   
  27.           // 从request得到 所有 上传域的列表   
  28.           List fileList =  null;    
  29.           try {   
  30.                fileList = sfu.parseRequest(request);    
  31.           } catch (FileUploadException e) {// 处理文件尺寸过大异常   
  32.                e.printStackTrace();   
  33.                if (e instanceof SizeLimitExceededException) {   
  34.                    out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");   
  35.                    out.println("<a href=\"excelInsert.action\" target=\"_top\">返回</a>");   
  36.                    return;   
  37.                }   
  38.                //e.printStackTrace();   
  39.            }   
  40.            // 没有文件上传   
  41.            if (fileList == null || fileList.size() == 0) {   
  42.                out.println("文件大小不能为空,请选择上传文件<p />");   
  43.                out.println("<a href=\"excelInsert.action\" target=\"_top\">返回</a>");   
  44.                return;   
  45.            }   
  46.            // 得到所有上传的文件   
  47.            Iterator fileItr = fileList.iterator();   
  48.            // 循环处理所有文件   
  49.            while (fileItr.hasNext()) {   
  50.                 FileItem fileItem = null;   
  51.                 String path = null;   
  52.                 long size = 0;   
  53.                 // 得到当前文件   
  54.                 fileItem = (FileItem) fileItr.next();   
  55.                 // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)   
  56.                 if (fileItem == null || fileItem.isFormField()) {   
  57.                  continue;   
  58.                 }   
  59.                 // 得到文件的完整路径   
  60.                 path = fileItem.getName();     
  61.                 path = new String(path.getBytes("ISO-8859-1"),"UTF-8");   
  62.                 System.out.println("完整路径="+path);   
  63.                 // 得到文件的大小   
  64.                 size = fileItem.getSize();   
  65.                 if ("".equals(path) || size == 0) {   
  66.                     out.println("请选择上传文件<p />");   
  67.                     out.println("<a href=\"excelInsert.action\" target=\"_top\">返回</a>");   
  68.                     return;   
  69.                 }   
  70.        
  71.                 // 得到去除路径的文件名   
  72.                 String t_name = path.substring(path.lastIndexOf("\\") + 1);   
  73.                 // 得到文件的扩展名(无扩展名时将得到全名)   
  74.                 String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);   
  75.                 // 拒绝接受规定文件格式之外的文件类型   
  76.                 int allowFlag = 0;   
  77.                 int allowedExtCount = allowedExt.length;   
  78.                 for (; allowFlag < allowedExtCount; allowFlag++) {   
  79.                     if (allowedExt[allowFlag].equals(t_ext))   
  80.                         break;   
  81.                 }   
  82.                 if (allowFlag == allowedExtCount) {   
  83.                     out.println("请上传以下类型的文件<p />");   
  84.                     for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)   
  85.                         out.println("*." + allowedExt[allowFlag]   
  86.                                                       + "   ");   
  87.                         out.println("<p /><a href=\"excelInsert.action\" target=\"_top\">返回</a>");   
  88.                         return;   
  89.                 }   
  90.        
  91.                 long now = System.currentTimeMillis();   
  92.                 // 根据系统时间生成上传后保存的文件名   
  93.                 String prefix = String.valueOf(now);   
  94.                 // 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下   
  95.                 u_name = this.getServletContext().getRealPath("/")+"ImagesUploaded"+"\\"  
  96.                   + prefix + "." + t_ext;   
  97.                 System.out.println("文件上传后的路径!u_name="+u_name);   
  98.                 try {   
  99.                      // 保存文件   
  100.                      fileItem.write(new File(u_name));   
  101.                      out.println("文件上传成功. 已保存为: " + prefix + "." + t_ext   
  102.                        + "   文件大小: " + size + "字节<p />");   
  103.                      out.println("<a href=\"excelInsert.action\" target=\"_top\">继续上传</a>");   
  104.                 } catch (Exception e) {   
  105.                     e.printStackTrace();   
  106.                 }    
  107.            }   
  108.            u_name = u_name.replace("\\", "/");   
  109.            System.out.println("u_name =="+u_name);   
  110.            insert(u_name,request,response);   
  111.               
  112.            /******************这个你把它去掉*****************/   
  113.            //主要是为了导入成功以后,将它显示到页面上的方法   
  114.            List list_lxmc = exam.getAllStlxMc();   
  115.            for(int i=0;i<list_lxmc.size();i++){   
  116. //              System.out.println("类型名称"+list_lxmc.size()+";"+list_lxmc.get(i));   
  117.            }   
  118.                
  119.            request.setAttribute("list_lxmc", list_lxmc);   
  120.                
  121.                
  122.            List list_allSel = exam.getSelThemeTypeNamesobr_ones();   
  123. //         System.out.println(list_allSel+"..............");   
  124.            request.setAttribute("list_allSel", list_allSel);   
  125.               
  126.            /***************************/   
  127.            request.getRequestDispatcher("/admin/thememanage/excelInsert.jsp").forward(request, response);   
  128.   
  129.     }   
  130.   
  131.   
  132.   
  133. public void insert(String path,HttpServletRequest request,HttpServletResponse response){   
  134.         try{   
  135.             //////////// 读取 u_name 文件 并保存///////////   
  136.                
  137.             System.out.println("开始时间="+new Date());   
  138.                
  139.             java.io.File file = new java.io.File(path);   
  140.             java.io.InputStream inStream = new java.io.FileInputStream(file);   
  141.             HSSFWorkbook wb = new HSSFWorkbook(inStream);   
  142.                
  143.             //int sheetNum = wb.getNumberOfSheets();     
  144.             int sheetNum = 1;    
  145.             ThemeBean tb = null;   
  146.             ArrayList list = new ArrayList();   
  147.             //为了获得32随机数主键   
  148.             UUIDGenerator uuid=new UUIDGenerator();   
  149.             for (int i = 0; i < sheetNum; i++){   
  150.                 HSSFSheet childSheet = wb.getSheetAt(i);   
  151.                 int rowNum = childSheet.getLastRowNum() + 1;   
  152. //              HSSFRow rowline = childSheet.getRow(rowNum);    
  153.                 //这里我取不到列数的,所以将它写死了   
  154.                 int cellNum =6;    
  155. //              System.out.println("列数"+rowline.getLastCellNum());   
  156.                 for (int j = 2; j < rowNum; j++){       
  157.                     tb = new ThemeBean();   
  158.                     HSSFRow row = childSheet.getRow(j);    
  159.                     if (row == null)   
  160.                         continue;       
  161.                     String value = "";   
  162.                     for (int k = 0; k < cellNum; k++){    
  163.                         HSSFCell cell = row.getCell((short) k);   
  164. //                      System.out.println(cell.getCellType()+"===type");   
  165.                         if (cell.getCellType() != HSSFCell.CELL_TYPE_STRING){   
  166.                           continue;   
  167.                         }      
  168.                         //循环取到xls中的值   
  169.                         value = String.valueOf(cell.getStringCellValue().trim());   
  170.                         //System.out.println("value="+a);   
  171.                         if (value == null)   
  172.                             value = "";   
  173.                         //对取到值 中有特殊符号进行处理(这个方法可选)   
  174.                         value = value.replace("'""");   
  175.                         value = value.replace("‘""");   
  176.                         value = value.replace("’""");    
  177.                             
  178.                         switch(k){   
  179.                             case 0: tb.setSTTM(value);    
  180.                             case 1: tb.setSTKSX1(value);   
  181.                             case 2: tb.setSTKSX2(value);   
  182.                             case 3: tb.setSTKSX3(value);    
  183.                             case 4: tb.setSTKSX4(value);    
  184.                             case 5: tb.setRIGHTRESULT(value);    
  185.                         }    
  186.                     }   
  187.                        
  188.                     tb.setSTZT("未使用");    
  189.                     tb.setBZ("备注就省略了");   
  190.                     tb.setSTXXID(uuid.getNextValue("STXXID"));   
  191.                     tb.setSTBH(uuid.getNextValue("STBH"));   
  192.                     //将值放到对象中在 放到list中,为了方便插入数据库   
  193.                     list.add(tb);    
  194.                 }   
  195.             }   
  196.             try{   
  197.                 ThemeAction action  = new ThemeAction();   
  198.                 //判断这个xls有没有被从复导入   
  199.                 String ret = action.upload(list);    
  200.                 if(ret!="ok"){   
  201.                     request.setAttribute("excel", ret);   
  202.                 }   
  203.                 System.out.println("结束时间="+new Date());    
  204.                 //我有4000多条数据大概花了1分钟左右的,读xls只花了2秒钟的,插入数据库时间要多点,可能是我的方法写的不好,还请理解,你们也可以用自己更好的方法来代替   
  205.                     
  206.             }catch(Exception ex){   
  207.                 ex.printStackTrace();   
  208.                 System.out.println("有异常的");   
  209.                 return;   
  210.             }   
  211.             //关闭文件流   
  212.             inStream.close();    
  213.             //删除临时文件   
  214.             file.delete();     
  215.         }catch(Exception e){   
  216.             e.printStackTrace();   
  217.         }   
  218.     }   

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多