JSP实现从数据库导出数据到Excel下载的方法

一、前言

本文将介绍在JSP中如何通过JDBC连接数据库,并将从数据库中查询到的数据导出为Excel文件进行下载。下面是本文所需要用到的前置条件:

1.已安装JDK环境并配置好环境变量
2.已安装Tomcat服务器并成功启动
3.已安装MySQL数据库

二、数据库连接以及查询操作

首先我们需要用到JDBC连接数据库,实现之前需要导入MySQL对应的JDBC驱动包,这里以mysql-connector-java-8.0.21.jar为例:

<%@ page language="java" import="java.sql.*" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<%
    //连接数据库
    String driver = "com.mysql.cj.jdbc.Driver"; // MySQL驱动程序
    String url = "jdbc:mysql://localhost:3306/db_name?useSSL=true&serverTimezone=UTC"; // 数据库
    String user = "username"; // 数据库用户名
    String password = "passwd"; // 数据库密码
    Connection conn = null;
    Statement pstmt = null;
    try {
        Class.forName(driver); // 加载驱动程序
        conn = DriverManager.getConnection(url, user, password); // 连接数据库
        if (conn != null) {
            System.out.println("连接成功!");
            String sql = "SELECT * FROM user";
            pstmt = conn.createStatement();
            ResultSet rs = pstmt.executeQuery(sql);
            while (rs.next()) {
                String name = rs.getString("name");
                int age = rs.getInt("age");
                out.println("name:" + name + "&nbsp;age:" + age + "<br>");
            }
            rs.close();
            pstmt.close();
            conn.close();
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if (pstmt != null) {
                pstmt.close();
            }
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
%>

代码中数据库连接信息如下:

1、驱动:com.mysql.cj.jdbc.Driver

2、数据库地址:jdbc:mysql://localhost:3306/db_name?useSSL=true&serverTimezone=UTC

3、用户名:username

4、密码:passwd

这里我们通过JDBC连接数据库,并查询了名为user的表中的所有数据。注意:连接成功后一定要关闭连接。

三、用POI将数据写入EXCEL文件

接下来,我们将查询出来的数据写入Excel文件中。这里我们需要用到POI库,Poi是一款apache组织开发的用于操作excel的Java类库,其核心是由POI API库构成,api包以及依赖有以下几个:

1.poi-3.17.jar

2.poi-ooxml-3.17.jar

3.poi-ooxml-schemas-3.17.jar

4.xmlbeans-2.3.0.jar

<%@ page import="java.io.File" %>
<%@ page import="java.io.FileOutputStream" %>
<%@ page import="java.io.IOException" %>
<%@ page import=" org.apache.poi.hssf.usermodel.HSSFWorkbook" %>
<%@ page import=" org.apache.poi.ss.usermodel.*" %>
<%
    //连接数据库
    String driver = "com.mysql.cj.jdbc.Driver"; // MySQL驱动程序
    String url = "jdbc:mysql://localhost:3306/db_name?useSSL=true&serverTimezone=UTC"; // 数据库地址
    String user = "username"; // 数据库用户名
    String password = "passwd"; // 数据库密码
    Connection conn = null;
    Statement pstmt = null;
    try {
        Class.forName(driver); // 加载驱动程序
        conn = DriverManager.getConnection(url, user, password); // 连接数据库
        if (conn != null) {
            System.out.println("连接成功!");
            String sql = "SELECT * FROM user";
            pstmt = conn.createStatement();
            ResultSet rs = pstmt.executeQuery(sql);
            //创建Excel对象
            Workbook wb = new HSSFWorkbook();
            Sheet sheet = wb.createSheet("user");
            Row row0 = sheet.createRow(0);
            Cell cell_0_0 = row0.createCell(0);
            Cell cell_0_1 = row0.createCell(1);
            cell_0_0.setCellValue("姓名"); 
            cell_0_1.setCellValue("年龄");
            int index=1;
            while (rs.next()) {
                Row row = sheet.createRow(index++);
                Cell cell1 = row.createCell(0);
                Cell cell2 = row.createCell(1);
                cell1.setCellValue(rs.getString("name"));
                cell2.setCellValue(rs.getInt("age"));
            }
            //写入文件
            String fileName = "user.xls";
            File file = new File(fileName);
            FileOutputStream fos = new FileOutputStream(file);
            wb.write(fos);
            fos.close();
            out.println("导出成功!");
            rs.close();
            pstmt.close();
            conn.close();
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (pstmt != null) {
                pstmt.close();
            }
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
%>

以上代码借助POI来创建Excel对象,并将数据遍历写入Excel文件中,最终导出的Excel文件名为:user.xls。

四、下载功能的实现

将Excel文件成功生成后,这里我们介绍如何通过浏览器直接对生成的Excel文件下载。这里我们引入一个Java下载的servlet:ServletFiledownload。

在实际应用中,当用户请求下载时,先调用Servlet,在Servlet中设置Response对象的内容类型和Header,然后将Excel文件通过IO流下载到用户的计算机上。

步骤如下:

1.将下载用的文件放入WebContent下的download目录下;
2.配置web.xml;
3.编写Servlet。

示例代码:

web.xml:

  <servlet>
        <servlet-name>DownloadServlet</servlet-name>
        <servlet-class>com.learn.DownloadServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DownloadServlet</servlet-name>
        <url-pattern>/download</url-pattern>
    </servlet-mapping>

DownloadServlet.java:

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
public class DownloadServlet  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html;charset=utf-8");
        response.setCharacterEncoding("UTF-8");
        String filename="user.xls";
        String filePath = request.getServletContext().getRealPath("/download/"+filename);
        File file=new File(filePath);
        if(!file.exists()){
            out.println("亲,你要下载的文件不存在哦!");
            return ;
        }
        response.setHeader("Content-Disposition", "attachment;filename="
                +new String(filename.getBytes("utf-8"),"ISO-8859-1"));
        byte[] buffer=new byte[1024];//缓冲区大小
        FileInputStream fis=null;//文件输入流
        BufferedInputStream bis=null;//缓冲输入流
        try {
            fis=new FileInputStream(file);//文件流
            bis=new BufferedInputStream(fis);
            OutputStream os=response.getOutputStream();//输出流
            int i=bis.read(buffer);//读
            while(i!=-1){
                os.write(buffer,0,i);//写
                i=bis.read(buffer);
            }
            out.println("下载成功!");
            bis.close();
            fis.close();
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            bis.close();
            fis.close();
        }
    }
}

以上代码实现了当用户请求/download/user.xls时,自动下载WebContent/download/下的user.xls文件。

至此,JSP实现从数据库导出数据到Excel下载的方法已经完成。

参考链接:

  1. http://poi.apache.org/
  2. https://www.jianshu.com/p/4f4c3f23a9ea
  3. https://www.cnblogs.com/hdd-le/p/10301159.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP实现从数据库导出数据到Excel下载的方法 - Python技术站

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

相关文章

  • JAVA构造函数(方法)示例详解

    JAVA构造函数(方法)示例详解 什么是构造函数? 在Java中,构造函数是一种特殊类型的方法,它用于初始化对象的重要成员变量。构造函数的名称必须与类名相同,因此在创建新对象时,它们会被自动调用。可以使用构造函数来设置类的成员变量的初值、分配内存空间、初始化对象等。Java中可以创建一个以上的构造函数,它们可以有不同的参数列表,但它们的名称必须与类名相同。 …

    Java 2023年5月23日
    00
  • java实现学生选课系统

    Java实现学生选课系统攻略 系统功能要求 学生登录、退出登录 查看所有课程列表 查询某门课程的详细信息 选课或退课 查看已选课程列表 数据库设计 选课系统的数据模型可以包含以下几个实体: 学生 课程 选课记录 可以使用MySQL作为数据库实现。下面是数据库表的设计: 表名 字段名 类型 约束 students id int 主键,自增长 username …

    Java 2023年5月19日
    00
  • java-jsp springmvc-controller 传值到页面的方法

    下面是完整的攻略: Java JSP SpringMVC Controller传值到页面的方法 在Java Web开发中,SpringMVC是一种常用的框架。在开发过程中,我们经常需要在Controller中处理数据,然后将处理后的数据传递到页面中进行渲染。本文将介绍SpringMVC Controller传值到页面的几种方法。 1. Model和Model…

    Java 2023年6月15日
    00
  • Java中jqGrid 学习笔记整理——进阶篇(二)

    让我来详细讲解一下“Java中jqGrid 学习笔记整理——进阶篇(二)”这篇文章的内容。 一、概述 这篇文章是介绍如何在Java web项目中使用jqGrid进行数据展示和交互的进阶篇。主要包括以下内容: jqGrid特性及概念解析; 如何使用Java代码动态生成jqGrid; 如何在jqGrid中使用自定义格式化函数; 如何使用jqGrid中的事件; 如…

    Java 2023年5月20日
    00
  • htm调用JS代码

    当HTML页面引入JavaScript(JS)文件并调用JS代码时,可以通过以下步骤实现: 在HTML文件中使用标签引入JS文件。在HTML中使用标签时,需要指定src属性来引入JS文件。 例如,在如下HTML页面中,通过引入“script.js”文件实现JS代码的调用: <!DOCTYPE html> <html lang="e…

    Java 2023年6月15日
    00
  • Java如何把文件夹打成压缩包并导出

    Java 通过 ZipOutputStream 类提供了将一个文件夹打成压缩包并导出的功能。以下是详细的攻略: 第一步:导入ZipOutputStream类 为了使用ZipOutputStream类,需要先将其导入到你的Java代码中。可以使用以下代码: import java.io.FileOutputStream; import java.io.IOEx…

    Java 2023年5月19日
    00
  • maven环境变量配置讲解

    下面是详细的”Maven环境变量配置讲解”攻略,包含了配置过程、示例和注意事项。 配置Maven环境变量 在配置Maven环境变量之前,需要先下载和安装Maven。 1. 配置MAVEN_HOME环境变量 第一步是配置MAVEN_HOME环境变量。MAVEN_HOME是指Maven的安装目录,以下是配置MAVEN_HOME环境变量的步骤: 打开计算机的文件资…

    Java 2023年5月20日
    00
  • Java实现雪花算法的示例代码

    题目:Java实现雪花算法的示例代码 1. 什么是雪花算法? 雪花算法(Snowflake)是Twitter公司开发的一种唯一ID生成算法,它可以生成一个长度为64bit的唯一ID,被广泛应用于分布式系统中,这样可以避免ID冲突的情况。 雪花算法的生成,主要依靠了数据中心ID(5位)、机器ID(5位)、时间戳(41位)以及自增的序列(12位)。 2. 雪花算…

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