`

利用struts的FormFile上传excel文件,并导入插入数据库

阅读更多
操作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如下:


 

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

<script language="javascript">

function myFormCheck(theform)
{
   if(theform.theFile.value=="")
    {
       alert("请点击浏览按钮,选择您要上传的文件!")
       theform.theFile.focus;
       return (false);
    }
    else
    {
       str= theform.theFile.value;
       strs=str.toLowerCase();
       lens=strs.length;
       extname=strs.substring(lens-4,lens);
       if(extname!=".xls")
       {
         alert("请选择excel文件!")
         return (false);
       }
      
    }
}
</script>

<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Insert title here</title>
</head>
<body>
    <form name="uploadform" action="importdata.do" enctype="multipart/form-data" method=post onsubmit="return myFormCheck(this)">
       <input type="file" name="theFile">
       <input type="submit" value="导入">
    </form>

</body>
</html>

 

其中用js从客户端判断了下文件的类型。在服务端同样判断了类型,这是防止某些人绕过js,直接上传非excel文件。

其中调用action  importdata.do ,在struts-config.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
  <data-sources />
  <form-beans >
    <form-bean name="uploadForm" type="com.alihoo.struts.form.UploadForm" />

  </form-beans>

  <global-exceptions />
  <global-forwards >
    <forward name="import_data_error" path="/importJsp.jsp" />
    <forward name="success" path="/success.jsp" />

  </global-forwards>

  <action-mappings >
    <action
      attribute="uploadForm"
      name="uploadForm"
      path="/importdata"
      scope="request"
      type="com.alihoo.struts.action.ImportdataAction"
      validate="false" />

  </action-mappings>

  <message-resources parameter="com.alihoo.struts.ApplicationResources" />
</struts-config>

因为是上传文件,request应该是得不到数据的,所以用了一个UploadForm,其中只有一个成员FormFile theFile.注意,theFile不是随便命名的,是跟上传页面中<input type="file" name="theFile">的name一样的。其中UploadForm代码如下:


package com.alihoo.struts.form;

import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;

public class UploadForm extends ActionForm ...{

    private FormFile theFile;

    public FormFile getTheFile() ...{
        return theFile;
    }

    public void setTheFile(FormFile theFile) ...{
        this.theFile = theFile;
    }
}为了方面测试,都没分什么dao层之类,全部放在aciton中了。这里数据表有exceltable有三个字段,一个id,int型自增,一个username,一个password都是字符型。这里假设excel的数据也是三个字段的,即已经指定id。一般来说不应在excel指定id,里面指定了id是主键,所以有重复记录的时候就终止了,这里都没判断是否有重复id,太麻烦了。

那个aciton的具体代码如下:

/**//*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.alihoo.struts.action;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.Cell;
import jxl.CellType;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

import com.alihoo.struts.form.UploadForm;

/** *//** 
 * MyEclipse Struts
 * Creation date: 04-21-2008
 * 
 * XDoclet definition:
 * @struts.action path="/importdata" name="uploadForm" scope="request"
 */
public class ImportdataAction extends Action ...{
    /**//*
     * Generated Methods
     */

    /** *//** 
     * Method execute
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) ...{
        UploadForm uploadForm = (UploadForm) form;// TODO Auto-generated method stub
        FormFile xlsFile=uploadForm.getTheFile();
        
        System.out.println(xlsFile.getFileName());
        System.out.println(xlsFile.getContentType());
        System.out.println(xlsFile.getFileSize());
        
        
        
        if(!xlsFile.getContentType().equals("application/vnd.ms-excel"))////////////不是excel文件
        ...{
            System.out.println("类型不对");
            return mapping.findForward("import_data_error");
            
        }
        else
        ...{
            try ...{
                if(!importData(xlsFile.getInputStream()))
                ...{
                    
                    return mapping.findForward("import_data_error");
                }
            } catch (FileNotFoundException e) ...{
                // TODO Auto-generated catch block
                e.printStackTrace();
                return mapping.findForward("import_data_error");
            
            } catch (IOException e) ...{
                // TODO Auto-generated catch block
                e.printStackTrace();
                return mapping.findForward("import_data_error");
            }
            return mapping.findForward("success");
        }
        
        
    }
    private boolean importData(InputStream is)
    ...{
      /**//*连接数据库 */
        String url = "jdbc:mysql://localhost/exceltest";
        String userName = "root";
        String password = "850522";
        String sql = null;
        Connection conn = null;
        Statement stmt = null;

        try ...{
            Class.forName("com.mysql.jdbc.Driver");
            
        } catch (ClassNotFoundException e) ...{
            System.err.print("classNotFoundException");
            e.printStackTrace();
        }
        try ...{
            conn = DriverManager.getConnection(url, userName, password);
        } catch (SQLException e1) ...{
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        
        /**//*获得xls数据,并导入*/
        try...{
            jxl.Workbook rwb = Workbook.getWorkbook(is);
            
            /**//*这里假设有多个sheets,若只有一个,则下面没必要用for,直接get(0)*/
            int sheets = rwb.getNumberOfSheets();
            
          
            
            for(int i=0;i<sheets;i++)
            ...{
                 Sheet rs = rwb.getSheet(i);
                 System.out.println("Sheet Name:"+rs.getName());
                 int columnNum=rs.getColumns();
                 int rowNum=rs.getRows();
                 System.out.println("columnNum:"+columnNum);
                
                 for(int row=0;row<rowNum;row++)
                 ...{
                     PreparedStatement pstmInsert = conn.prepareStatement("insert into exceltable values(?,?,?)");
                     for(int column=0;column<columnNum;column++)
                     ...{
                         Cell crl=rs.getCell(column,row);
                         if(crl.getType()==CellType.NUMBER)
                         ...{
                              System.out.println(column+1);
                             NumberCell numc = (NumberCell)crl;
                            pstmInsert.setInt(column+1,(int)numc.getValue());
                          
                         }
                         else
                         ...{
                             System.out.println(column+1);
                             pstmInsert.setString(column+1, crl.getContents());
                             
                         }
                      }
                     System.out.println("************");
                     pstmInsert.executeUpdate();
                    
                 }

            }
           
            
            
            
          rwb.close();  

      
        }
        catch (Exception e)
        ...{
            e.printStackTrace();
            return false;
        }
        finally ...{
            try ...{
                if(stmt!=null)
                     stmt.close();
                if(conn!=null)
                    conn.close();
                is.close();/////////关闭输入流
            } catch (SQLException e) ...{

                e.printStackTrace();
            } catch (IOException e) ...{
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        return true;
        
    }
    
}差不多就这样吧,不懂q我,哈哈~

 

分享到:
评论

相关推荐

    简单java做excel解析并验证插入数据库.pdf

    这个PDF文档标题提到的“简单java做excel解析并验证插入数据库”涉及到的关键技术包括Excel文件解析、文件上传以及数据库操作。下面我们将详细讨论这些知识点。 首先,Excel文件解析通常使用Apache POI库,这是一个...

    struts 单文件上传和多文件上传带进度条

    在Struts中,可以实现单文件和多文件的上传,并且为了提升用户体验,我们还可以添加进度条来显示文件上传的状态。本文将详细介绍如何在Struts中实现这两个功能,并带上传进度条。 首先,我们需要了解Struts中处理...

    struts框架中formFile批量上传图片

    在Struts框架中,`FormFile`类是用于处理文件上传的一个关键组件,特别是对于单个或批量上传图片的情况。本篇文章将详细探讨如何使用Struts的`FormFile`来实现批量上传图片的功能。 ### 1. FormFile概述 `FormFile`...

    Struts1.2 formfile实现批量上传

    在Struts1.2框架中,FormFile是用于处理文件上传的一个关键组件,尤其是在实现批量上传功能时。本文将深入探讨如何使用FormFile在Struts1.2中实现实现批量文件上传,以及相关的技术要点。 一、Struts1.2简介 Struts...

    struts 文件上传 Struts实现文件上传

    Struts 提供了强大的支持来处理文件上传操作。下面将详细介绍Struts 实现文件上传的相关知识点。 ### 1. Struts 框架概述 Struts 是Apache软件基金会下的一个开源项目,其主要目标是提供一个可扩展且易于维护的...

    struts文图片上传 并存入数据库 在jsp页面显示

    在Struts中,我们可以利用`org.apache.struts.upload.FormFile`类处理文件上传。用户选择文件后,数据会被封装成FormFile对象,然后可以通过ActionForm提交到服务器。 3. **文件存储**:上传的图片需要被存储在...

    struts2文件上传下载

    在Struts2框架中实现文件上传和下载功能,是Web开发中常见的需求。Struts2作为一个成熟的MVC框架,提供了简单的API和标记库来处理文件上传下载的业务逻辑。下面是基于给定文件内容的知识点详细说明。 ### Struts2...

    jspsmart + struts1.2 以及用 formfile 上传例子

    myeclipse 工程 上传页:index.html 有两个例子: 一个是 jspsmart + strust 1.2 另一个用的 struts 自带的 formfile 环境:winxp jdk1.4.2 tomcat5.0或weblogic8.1 发布前,最好先编译一下,毕竟JDK版本太老了

    spring+struts+hibernate实现文件的上传和下载

    SSH 框架的最新版本(Struts 1.2、Spring 1.2.5、Hibernate 3.0)可以很好地支持文件上传和下载,并允许在不同数据库间进行移植。 **总体实现** 文件上传的流程是将文件存储到数据库中的一个表,例如 `T_FILE`,该...

    struts1上传文件带进度条

    总的来说,实现Struts1文件上传带进度条的功能,需要前端与后端的紧密配合,利用现代浏览器的API,以及对Struts1框架的深入理解。这不仅可以提升用户体验,也是技术能力的一种体现。在实际开发中,我们还需要考虑...

    Struts1实现的文件上传

    在这个“Struts1实现的文件上传”项目中,我们将深入探讨如何在Struts1框架下实现文件上传功能,并不涉及文件下载的部分。 首先,理解文件上传的基本流程是至关重要的。在Web应用中,用户通过HTML表单选择本地文件...

    struts1实现文件上传

    ### Struts1 实现文件上传的关键技术点 在Struts1框架中实现文件上传功能是一项常见但又具有一定技术挑战的任务。下面将详细解析文件上传的实现过程,包括关键类的使用、文件处理逻辑以及异常处理等方面。 #### ...

    struts1实现的文件批量上传

    FormFile是Struts1用来处理上传文件的类,它可以获取文件名、内容类型、大小等信息。在这个例子中,使用了一个ArrayList来存储用户选择的所有文件: ```java public class BatchUploadForm extends ActionForm { ...

    struts文件上传.pdf

    ### Struts文件上传知识点 #### 一、Struts框架简介 Struts是一个开源的MVC(Model-View-Controller)框架,它简化了基于Java的Web应用程序开发过程。Struits框架提供了一种结构化的方式来组织代码,使得开发更加...

    基于Struts文件上传(FormFile)详解

    本文将详细介绍基于Struts文件上传的实现方法,包括在JSP文件中定义文件上传表单、在Form表单中定义FormFile、利用Struts文件进行关联Form、获取上传文件的各种信息等。 在JSP文件中定义文件上传表单 在Struts中,...

    jsp+struts文件上传

    在本文中,我们将深入探讨如何使用JSP(JavaServer Pages)和Struts框架实现文件上传功能。这是一个在Web开发中常见的需求,特别是在处理用户提交的数据时。Struts是一个基于MVC(Model-View-Controller)设计模式的...

    struts实现多文件上传1.txt

    本文将详细介绍如何利用Struts框架实现多文件上传。 #### 二、Struts框架简介 Struts是一个开源的Java Web应用框架,基于MVC设计模式。它通过模型、视图和控制器的分离来简化Web应用程序的开发和维护工作。Struts...

    用struts上传多个文件的方法

    本文将详细解析如何使用Struts框架实现多文件上传的功能,并对相关的代码进行深入分析。 #### 一、Struts框架简介 Struts是一款开源的Java MVC(Model-View-Controller)框架,它简化了Web应用程序的开发过程,...

    Struts1万能文件操作组件

    在处理表单提交时,可以通过ActionForm中的FormFile对象获取到上传的文件信息,并进行后续的存储或处理。 2. **文件下载**: FOS组件允许开发者创建链接,用户点击后可以直接下载服务器上的文件。这涉及到响应头的...

    struts多文件上传

    Struts框架通过处理这些请求并将其转化为ActionForm对象来支持文件上传。 1. **配置Struts-config.xml**: 在Struts配置文件中,你需要为文件上传创建一个特定的ActionMapping。添加一个名为`fileUpload`的`...

Global site tag (gtag.js) - Google Analytics