xls上传,导入!!!!!利用struts的FormFile,并导入插入数据库

来源:互联网 发布:淘宝卖家规则大全2017 编辑:程序博客网 时间:2024/05/29 16:03
操作excel貌似有两个比较好的开源项目,这里用的是JAVA EXCEL API,参考文章如下 

http://www.chinaitpower.com/A200508/2005-08-10/190567.html 

首先就下载所需的包了 

http://www.andykhan.com/jexcelapi/jexcelapi_2_6_6.tar.gz 

解压后,只要里面的一个jxl.jar,加入到工程的路径中。具体的操作和部分API参考文章 

http://www-128.ibm.com/developerworks/cn/java/l-javaExcel/index.html 

下面是从上传导入的核心代码。 

上传页面的jsp如下: 


  1. <%@ page language="java" contentType="text/html; charset=GBK"  
  2.     pageEncoding="GBK"%>  
  3.   
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7.   
  8. <script language="javascript">  
  9.   
  10. function myFormCheck(theform)  
  11. {  
  12.    if(theform.theFile.value=="")  
  13.     {  
  14.        alert("请点击浏览按钮,选择您要上传的文件!")  
  15.        theform.theFile.focus;  
  16.        return (false);  
  17.     }  
  18.     else  
  19.     {  
  20.        str= theform.theFile.value;  
  21.        strs=str.toLowerCase();  
  22.        lens=strs.length;  
  23.        extname=strs.substring(lens-4,lens);  
  24.        if(extname!=".xls")  
  25.        {  
  26.          alert("请选择excel文件!")  
  27.          return (false);  
  28.        }  
  29.         
  30.     }  
  31. }  
  32. </script>  
  33.   
  34. <meta http-equiv="Content-Type" content="text/html; charset=GBK">  
  35. <title>Insert title here</title>  
  36. </head>  
  37. <body>  
  38.     <form name="uploadform" action="importdata.do" enctype="multipart/form-data" method=post onsubmit="return myFormCheck(this)">  
  39.        <input type="file" name="theFile">  
  40.        <input type="submit" value="导入">  
  41.     </form>  
  42.   
  43. </body>  
  44. </html>  
  1. 其中用js从客户端判断了下文件的类型。在服务端同样判断了类型,这是防止某些人绕过js,直接上传非excel文件。  
  2.   
  3. 其中调用action  importdata.do ,在struts-config.xml配置如下:  
  4.   
  5. <?xml version="1.0" encoding="UTF-8"?>  
  6. <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">  
  7.   
  8. <struts-config>  
  9.   <data-sources />  
  10.   <form-beans >  
  11.     <form-bean name="uploadForm" type="com.alihoo.struts.form.UploadForm" />  
  12.   
  13.   </form-beans>  
  14.   
  15.   <global-exceptions />  
  16.   <global-forwards >  
  17.     <forward name="import_data_error" path="/importJsp.jsp" />  
  18.     <forward name="success" path="/success.jsp" />  
  19.   
  20.   </global-forwards>  
  21.   
  22.   <action-mappings >  
  23.     <action  
  24.       attribute="uploadForm"  
  25.       name="uploadForm"  
  26.       path="/importdata"  
  27.       scope="request"  
  28.       type="com.alihoo.struts.action.ImportdataAction"  
  29.       validate="false" />  
  30.   
  31.   </action-mappings>  
  32.   
  33.   <message-resources parameter="com.alihoo.struts.ApplicationResources" />  
  34. </struts-config>  
  35.   
  36. 因为是上传文件,request应该是得不到数据的,所以用了一个UploadForm,其中只有一个成员FormFile theFile.注意,theFile不是随便命名的,是跟上传页面中<input type="file" name="theFile">的name一样的。其中UploadForm代码如下:  
  37.   
  38.   
  39. package com.alihoo.struts.form;  
  40.   
  41. import org.apache.struts.action.ActionForm;  
  42. import org.apache.struts.upload.FormFile;  
  43.   
  44. public class UploadForm extends ActionForm ...{  
  45.   
  46.     private FormFile theFile;  
  47.   
  48.     public FormFile getTheFile() ...{  
  49.         return theFile;  
  50.     }  
  51.   
  52.     public void setTheFile(FormFile theFile) ...{  
  53.         this.theFile = theFile;  
  54.     }  
  55. }为了方面测试,都没分什么dao层之类,全部放在aciton中了。这里数据表有exceltable有三个字段,一个id,int型自增,一个username,一个password都是字符型。这里假设excel的数据也是三个字段的,即已经指定id。一般来说不应在excel指定id,里面指定了id是主键,所以有重复记录的时候就终止了,这里都没判断是否有重复id,太麻烦了。  
  56.   
  57. 那个aciton的具体代码如下:  
  58.   
  59. /**//* 
  60.  * Generated by MyEclipse Struts 
  61.  * Template path: templates/java/JavaClass.vtl 
  62.  */  
  63. package com.alihoo.struts.action;  
  64.   
  65. import java.io.FileInputStream;  
  66. import java.io.FileNotFoundException;  
  67. import java.io.IOException;  
  68. import java.io.InputStream;  
  69. import java.sql.Connection;  
  70. import java.sql.DriverManager;  
  71. import java.sql.PreparedStatement;  
  72. import java.sql.SQLException;  
  73. import java.sql.Statement;  
  74. import java.util.List;  
  75.   
  76. import javax.servlet.http.HttpServletRequest;  
  77. import javax.servlet.http.HttpServletResponse;  
  78.   
  79. import jxl.Cell;  
  80. import jxl.CellType;  
  81. import jxl.NumberCell;  
  82. import jxl.Sheet;  
  83. import jxl.Workbook;  
  84.   
  85. import org.apache.struts.action.Action;  
  86. import org.apache.struts.action.ActionForm;  
  87. import org.apache.struts.action.ActionForward;  
  88. import org.apache.struts.action.ActionMapping;  
  89. import org.apache.struts.upload.FormFile;  
  90.   
  91. import com.alihoo.struts.form.UploadForm;  
  92.   
  93. /** *//**  
  94.  * MyEclipse Struts 
  95.  * Creation date: 04-21-2008 
  96.  *  
  97.  * XDoclet definition: 
  98.  * @struts.action path="/importdata" name="uploadForm" scope="request" 
  99.  */  
  100. public class ImportdataAction extends Action ...{  
  101.     /**//* 
  102.      * Generated Methods 
  103.      */  
  104.   
  105.     /** *//**  
  106.      * Method execute 
  107.      * @param mapping 
  108.      * @param form 
  109.      * @param request 
  110.      * @param response 
  111.      * @return ActionForward 
  112.      */  
  113.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  114.             HttpServletRequest request, HttpServletResponse response) ...{  
  115.         UploadForm uploadForm = (UploadForm) form;// TODO Auto-generated method stub  
  116.         FormFile xlsFile=uploadForm.getTheFile();  
  117.           
  118.         System.out.println(xlsFile.getFileName());  
  119.         System.out.println(xlsFile.getContentType());  
  120.         System.out.println(xlsFile.getFileSize());  
  121.           
  122.           
  123.           
  124.         if(!xlsFile.getContentType().equals("application/vnd.ms-excel"))////////////不是excel文件  
  125.         ...{  
  126.             System.out.println("类型不对");  
  127.             return mapping.findForward("import_data_error");  
  128.               
  129.         }  
  130.         else  
  131.         ...{  
  132.             try ...{  
  133.                 if(!importData(xlsFile.getInputStream()))  
  134.                 ...{  
  135.                       
  136.                     return mapping.findForward("import_data_error");  
  137.                 }  
  138.             } catch (FileNotFoundException e) ...{  
  139.                 // TODO Auto-generated catch block  
  140.                 e.printStackTrace();  
  141.                 return mapping.findForward("import_data_error");  
  142.               
  143.             } catch (IOException e) ...{  
  144.                 // TODO Auto-generated catch block  
  145.                 e.printStackTrace();  
  146.                 return mapping.findForward("import_data_error");  
  147.             }  
  148.             return mapping.findForward("success");  
  149.         }  
  150.           
  151.           
  152.     }  
  153.     private boolean importData(InputStream is)  
  154.     ...{  
  155.       /**//*连接数据库 */  
  156.         String url = "jdbc:mysql://localhost/exceltest";  
  157.         String userName = "root";  
  158.         String password = "850522";  
  159.         String sql = null;  
  160.         Connection conn = null;  
  161.         Statement stmt = null;  
  162.   
  163.         try ...{  
  164.             Class.forName("com.mysql.jdbc.Driver");  
  165.               
  166.         } catch (ClassNotFoundException e) ...{  
  167.             System.err.print("classNotFoundException");  
  168.             e.printStackTrace();  
  169.         }  
  170.         try ...{  
  171.             conn = DriverManager.getConnection(url, userName, password);  
  172.         } catch (SQLException e1) ...{  
  173.             // TODO Auto-generated catch block  
  174.             e1.printStackTrace();  
  175.         }  
  176.           
  177.         /**//*获得xls数据,并导入*/  
  178.         try...{  
  179.             jxl.Workbook rwb = Workbook.getWorkbook(is);  
  180.               
  181.             /**//*这里假设有多个sheets,若只有一个,则下面没必要用for,直接get(0)*/  
  182.             int sheets = rwb.getNumberOfSheets();  
  183.               
  184.             
  185.               
  186.             for(int i=0;i<sheets;i++)  
  187.             ...{  
  188.                  Sheet rs = rwb.getSheet(i);  
  189.                  System.out.println("Sheet Name:"+rs.getName());  
  190.                  int columnNum=rs.getColumns();  
  191.                  int rowNum=rs.getRows();  
  192.                  System.out.println("columnNum:"+columnNum);  
  193.                   
  194.                  for(int row=0;row<rowNum;row++)  
  195.                  ...{  
  196.                      PreparedStatement pstmInsert = conn.prepareStatement("insert into exceltable values(?,?,?)");  
  197.                      for(int column=0;column<columnNum;column++)  
  198.                      ...{  
  199.                          Cell crl=rs.getCell(column,row);  
  200.                          if(crl.getType()==CellType.NUMBER)  
  201.                          ...{  
  202.                               System.out.println(column+1);  
  203.                              NumberCell numc = (NumberCell)crl;  
  204.                             pstmInsert.setInt(column+1,(int)numc.getValue());  
  205.                             
  206.                          }  
  207.                          else  
  208.                          ...{  
  209.                              System.out.println(column+1);  
  210.                              pstmInsert.setString(column+1, crl.getContents());  
  211.                                
  212.                          }  
  213.                       }  
  214.                      System.out.println("************");  
  215.                      pstmInsert.executeUpdate();  
  216.                       
  217.                  }  
  218.   
  219.             }  
  220.              
  221.               
  222.               
  223.               
  224.           rwb.close();    
  225.   
  226.         
  227.         }  
  228.         catch (Exception e)  
  229.         ...{  
  230.             e.printStackTrace();  
  231.             return false;  
  232.         }  
  233.         finally ...{  
  234.             try ...{  
  235.                 if(stmt!=null)  
  236.                      stmt.close();  
  237.                 if(conn!=null)  
  238.                     conn.close();  
  239.                 is.close();/////////关闭输入流  
  240.             } catch (SQLException e) ...{  
  241.   
  242.                 e.printStackTrace();  
  243.             } catch (IOException e) ...{  
  244.                 // TODO Auto-generated catch block  
  245.                 e.printStackTrace();  
  246.             }  
  247.         }  
  248.           
  249.         return true;  
  250.           
  251.     }  
  252.       


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 国外电话卡网速太慢怎么办 滴滴提现忘记登录密码怎么办 微信提现支付密码忘记了怎么办 小米手机前置摄像头打不开怎么办 mp4视频屏幕好小怎么办 投了简历没回应怎么办 借壳上市原股票怎么办 红米note3指纹解锁失灵怎么办 来分期刷脸失败怎么办 买到假货商家不承认怎么办 买到假货翻新货工商局怎么办 三星note8笔丢了怎么办 夜跑结束后该怎么办 lol客户端正在运行中怎么办 瑞和宝终端锁定怎么办 骊爽摩托车动力弱怎么办? 换了手机跟点微信怎么办 手机送点插头换了怎么办 校园网总是显示有代理软件怎么办 电脑连接无线网络需要登录怎么办 智校园密码忘了怎么办 ivvi手机开不开机怎么办 跑鞋子大了一码怎么办 洗浴搓澡出汗多该怎么办 联华超市卡丢了怎么办 飞利浦电视的应用打不开怎么办 贵阳市下岗职工办理门面补贴怎么办 陌陌上被骗了色怎么办 七位数的座机要怎么办 开通米粉卡店铺预留电话号码怎么办 办信用卡没有单位电话怎么办 qq账号永久封停怎么办 qq号给冻结了怎么办 微信被官方封2天怎么办 天虹的卡丢了怎么办 顺丰快递到不了的地区怎么办 信用卡兑换东西超过积分怎么办 新买的冰箱坏了怎么办 买新洗衣机出现克坏怎么办 京东当日达没到达怎么办 兴隆卡不能用了怎么办