一、前言
本文将介绍在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 + " 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下载的方法已经完成。
参考链接:
- http://poi.apache.org/
- https://www.jianshu.com/p/4f4c3f23a9ea
- https://www.cnblogs.com/hdd-le/p/10301159.html
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP实现从数据库导出数据到Excel下载的方法 - Python技术站