JSP上传excel及excel插入至数据库的方法

首先需要了解一些基本概念:

  1. JSP:Java Server Pages,是一种基于Java技术的动态网页开发技术,可以用来创建动态生成的HTML、XML或其他格式文档。

  2. Excel:一种电子表格处理软件,可以用来以表格形式展示、计算和管理数据。

  3. 数据库:是一个存储数据的集合,在Web应用中通常使用关系型数据库,例如MySQL、Oracle等。

实现JSP上传excel并将其中数据插入到数据库的方法,可以按照以下步骤进行:

  1. 在JSP页面中添加用于上传excel文件的表单,并为表单指定action和method属性。示例代码如下:
<!DOCTYPE html>
<html>
<head>
    <title>Upload Excel</title>
</head>
<body>
    <form action="upload.jsp" method="post" enctype="multipart/form-data">
        Select file to upload:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="Upload" name="submit">
    </form>
</body>
</html>
  1. 在上传页面的对应JSP文件中,使用Java的Apache POI库来解析上传的excel文件,并将其中数据插入到数据库中。示例代码如下:
<%@ page import="java.sql.*,java.util.*,java.io.*,org.apache.poi.ss.usermodel.*" %>
<%@ page import="org.apache.poi.xssf.usermodel.XSSFWorkbook,org.apache.poi.hssf.usermodel.HSSFWorkbook,org.apache.poi.ss.usermodel.DataFormatter" %>

<%
    //连接数据库
    Class.forName("com.mysql.jdbc.Driver");//使用MySQL时要加这一句
    Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase","root","password");
    PreparedStatement ps=null;

    //获取上传文件
    String fileName="",fileType="",fileContent="";
    String savePath=getServletContext().getRealPath("upload");//指定上传文件的保存路径
    File fileSaveDir=new File(savePath);
    if(!fileSaveDir.exists()){
        fileSaveDir.mkdir();
    }
    FileItemFactory factory=new DiskFileItemFactory();
    ServletFileUpload upload=new ServletFileUpload(factory);
    List<FileItem> items=upload.parseRequest(request);
    for(FileItem item:items){
        if(!item.isFormField()){
            fileName=new File(item.getName()).getName();//获取上传文件的文件名
            fileType=fileName.substring(fileName.lastIndexOf(".")+1);//获取上传文件的文件类型
            File file=new File(savePath,fileName);//创建上传文件的路径和文件
            item.write(file);//将上传文件写入到指定路径
        }
    }

    //将excel文件中数据插入到数据库
    FileInputStream is=new FileInputStream(new File(savePath+"/"+fileName));
    if(fileType.equalsIgnoreCase("xls")){
        HSSFWorkbook wb=new HSSFWorkbook(is);//处理.xls格式的excel文件
        Sheet sheet=wb.getSheetAt(0);//获取第一个工作表
        Iterator<Row> iterator=sheet.iterator();//获取所有行

        while(iterator.hasNext()){
            Row currentRow=iterator.next();//获取一行数据
            Iterator<Cell> cellIterator=currentRow.iterator();//获取该行所有单元格
            List<String> rowValues=new ArrayList<String>();//用于存储该行中所有单元格的值

            while(cellIterator.hasNext()){
                Cell currentCell=cellIterator.next();//获取一个单元格
                DataFormatter dataFormatter=new DataFormatter(Locale.US);
                String cellValue=dataFormatter.formatCellValue(currentCell);//获取该单元格的值
                rowValues.add(cellValue);//将该单元格的值添加到该行的值列表中
            }

            ps=conn.prepareStatement("insert into mytable(col1,col2,col3) values(?,?,?)");//预处理插入数据的sql语句
            ps.setString(1,rowValues.get(0));
            ps.setString(2,rowValues.get(1));
            ps.setString(3,rowValues.get(2));//将该行的值列表中的所有值插入到数据库中
            ps.executeUpdate();//执行插入操作

        }
        wb.close();
    }
    else if(fileType.equalsIgnoreCase("xlsx")){
        XSSFWorkbook wb=new XSSFWorkbook(is);//处理.xlsx格式的excel文件
        Sheet sheet=wb.getSheetAt(0);//获取第一个工作表
        Iterator<Row> iterator=sheet.iterator();//获取所有行

        while(iterator.hasNext()){
            Row currentRow=iterator.next();//获取一行数据
            Iterator<Cell> cellIterator=currentRow.iterator();//获取该行所有单元格
            List<String> rowValues=new ArrayList<String>();//用于存储该行中所有单元格的值

            while(cellIterator.hasNext()){
                Cell currentCell=cellIterator.next();//获取一个单元格
                DataFormatter dataFormatter=new DataFormatter(Locale.US);
                String cellValue=dataFormatter.formatCellValue(currentCell);//获取该单元格的值
                rowValues.add(cellValue);//将该单元格的值添加到该行的值列表中
            }

            ps=conn.prepareStatement("insert into mytable(col1,col2,col3) values(?,?,?)");//预处理插入数据的sql语句
            ps.setString(1,rowValues.get(0));
            ps.setString(2,rowValues.get(1));
            ps.setString(3,rowValues.get(2));//将该行的值列表中的所有值插入到数据库中
            ps.executeUpdate();//执行插入操作

        }
        wb.close();
    }

    //关闭数据库连接等资源
    ps.close();
    conn.close();
%>

以上代码中,使用了Apache POI库来解析上传的excel文件,将其转换为java数据类型,然后通过JDBC将数据插入到数据库中。其中insert into mytable(col1,col2,col3) values(?,?,?)是插入数据的sql语句,mytable、col1、col2、col3等要替换为真实的表名和字段名。

最后,我们需要在web.xml文件中配置文件上传的最大大小和最大请求大小。示例代码如下:

<web-app>
    <!-- 文件上传相关 -->
    <servlet>
        <servlet-name>upload</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>maxFileSize</param-name>
            <param-value>5242880</param-value>
        </init-param>
        <init-param>
            <param-name>maxRequestSize</param-name>
            <param-value>20971520</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>upload</servlet-name>
        <url-pattern>/upload/*</url-pattern>
    </servlet-mapping>
</web-app>

此配置文件中,maxFileSize指定了上传文件的最大大小(单位为字节),maxRequestSize指定了最大请求大小。

参考示例:

  1. 用JSP解析Excel并存储到MySQL的示例代码

  2. 如何使用JSP上传Excel文件并将其数据插入到MySQL中

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP上传excel及excel插入至数据库的方法 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java中高效的判断数组中某个元素是否存在详解

    Java中高效的判断数组中某个元素是否存在的方法,一般有以下两种: 方法一:使用Arrays类中的binarySearch()方法 Arrays类中的binarySearch()方法可以对已排序的数组进行二分查找,返回匹配元素的索引,若未找到则返回负数。该方法需要先对数组进行排序,时间复杂度为 O(log n)。 下面是一个使用binarySearch()方…

    Java 2023年5月26日
    00
  • Java synchronized底层实现原理以及锁优化

    Java中的synchronized关键字用于保证同步访问,避免出现多线程并发访问共享资源的问题,保证程序的正确性和一致性。在JVM中,synchronized的实现原理是通过Java对象头中的一个有关锁的标识位来实现的,具体的底层实现原理如下: Java对象头 Java对象在堆中的数据结构是由对象头和实例数据两部分组成的,其中对象头占用了8个或者12个字节…

    Java 2023年5月26日
    00
  • spring boot多数据源动态切换代码实例

    下面将为您详细讲解如何实现在Spring Boot应用中实现多数据源动态切换,并提供两个示例。 一、前置条件 在开始编写代码之前,需要满足以下条件: 确保已经正确配置了多个数据源,这些数据源需要连接的数据库表结构和数据内容都应当是相同的; 当前应用中必须已经引入了相关依赖,这里采用Spring Boot 2.x版本为例: <dependencies&g…

    Java 2023年5月20日
    00
  • Log4j新手快速入门教程

    Log4j新手快速入门教程攻略 介绍 Log4j是Java中广泛使用的开源日志记录组件。它可以将应用程序的日志输出到控制台、文件或网络,并可通过配置文件进行灵活的日志输出控制。本文将介绍Log4j的基本概念、使用方法和配置文件的格式,以帮助新手快速入门。 基本概念 Log4j提供了三个基本概念:Logger、Appender和Layout。 Logger:日…

    Java 2023年5月26日
    00
  • 如何创建一个AJAXControlToolKit的扩展控件

    创建 AJAX Control Toolkit 的扩展控件的过程大致可分为以下几个步骤: 创建一个新的 ASP.NET Web 控件库在 Visual Studio 中创建一个新的 ASP.NET 控件库。这里需要选择“Web 控件库”作为项目类型,并且将项目命名为“AJAXControlToolKit.Extended”。在创建完成后,打开“Assembl…

    Java 2023年6月15日
    00
  • 详解SpringMVC 基础教程 简单入门实例

    《详解SpringMVC 基础教程》是一篇介绍SpringMVC框架的文章,本文将为读者提供完整攻略,以供参考和学习。 SpringMVC 简介 SpringMVC是基于MVC设计模式的Web框架,它能够帮助开发者快速地搭建Web应用,并提供了丰富的标签和注解,使得开发Web应用变得更加简单。其优点包括组件化、灵活性、可重用性等。 SpringMVC 基础教…

    Java 2023年5月16日
    00
  • PHP实现防盗链的方法分析

    PHP实现防盗链的方法分析 什么是防盗链? 防盗链是指在网页制作和浏览时,为防止他人在未经允许情况下盗用自己网站资源,也就是防止其他网站将本站的图片等媒体资源引用到自己的网站上。 PHP实现防盗链的方法 方法一:根据Referrer来判断 在HTTP请求头中,将发送来请求的页面地址和该页面上的链接按照上述格式传送给服务器,这个“发送来请求的页面地址”就是Re…

    Java 2023年6月15日
    00
  • java 字符串相减(很简单的一个方法)

    Java中的字符串是不可修改的,也就是说,字符串变量一旦被创建,它的值就不能改变。因此,不能像数字那样直接相减。但是,可以使用一种简单的方法来实现字符串相减的效果。 具体来说,可以将一个字符串中的另一个字符串删除,实现字符串相减的效果。下面给出两个示例说明: 示例一: String str1 = "hello world"; String…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部