jsp+servlet上传excel并将数据导入到数据库表的实现方法

2023-02-15,,,,

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>excel文件上传</title>
<script src="jquery-3.5.1/jquery-3.5.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
function test1(){
if($("#uploadFile").val().trim()===""){
alert("上传文件不能为空");
return;
};
var form = new FormData(document.getElementById("uploadForm"));
$.ajax({
url:"Excel2DbServlet",
type:"post",
async:false,
data:form,
dataType:"text",
processData: false, // 告诉jQuery不要去处理发送的数据
contentType: false, // 告诉jQuery不要去设置Content-Type请求头
success:function(result){ if(result==="success"){
alert("上传成功");
}else{
alert("上传失败");
}
},
error:function(){
alert("servlet执行返回值出错");
}
}); } </script> </head>
<body>
<h1>excel文件上传至数据库测试页面</h1>
<form id="uploadForm" method="post" action="" enctype="multipart/form-data">
选择一个文件:
<input id="uploadFile" type="file" name="uploadFile" />
<br/><br/>
<input type="button" value="上传" onclick="test1()" />
</form> </body>
</html>
/*
* 该servlet用于从jsp页面获取excel并将其内容写入数据库的相关操作,主要包括
* (1)将请求包中的excel文件保存到服务器上特定路径下的方法excelUpload(),并给出excel在服务器上的具体路径excelPath;
* (2)将excelPath的excel文件分解为字符串,形如("","","",""),("","","",""),
* 最后拼接在insert语句后面实现批量插入
* (3) 根据插入结果正确与否返回提示信息。
*/
package com.honormes.servlet; import com.honormes.util.DbUtil;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; /**
*
* @author JoshwaWanag
*/
public class Excel2DbServlet extends HttpServlet { private static final long serialVersionUID = 1L;
// 上传文件存储目录
private static final String UPLOAD_DIRECTORY = "upload";
// 上传配置
private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3; // 3MB
private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB
private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String xlsFilePath="";//最后更新为上传xls在服务器上的绝对地址,由excelUpload()返回
String result="Error"; //最后更新为xls文件导入数据库正确与否的字符串,由excel2Db返回
System.out.println("doPost in Excel2Db"); //1. 调用excelUpload()将传递过来的excel表写入服务器硬盘,并返回该文件路径------
xlsFilePath =excelUpload(request,response); //2. 调用excel2Db()将xlsFilePath的excel文件内容读取出来并写入数据库-----------
if(!xlsFilePath.equals("Error")){
try {
result=excel2Db(xlsFilePath);
} catch (FileNotFoundException ex) {
Logger.getLogger(Excel2DbServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (BiffException ex) {
Logger.getLogger(Excel2DbServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}else{
result="Error";
} //3. 将2的结果result写入响应包
//System.out.println("result:="+result);
response.getWriter().print(result);
} //处理excel文件上传的相关程序
protected String excelUpload(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String answer="";
// 检测是否为多媒体上传
if (!ServletFileUpload.isMultipartContent(request)) {
// 如果不是则停止
PrintWriter writer = response.getWriter();
writer.println("Error: 表单必须包含 enctype=multipart/form-data");
writer.flush(); return "Error";
} // 配置上传参数
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
factory.setSizeThreshold(MEMORY_THRESHOLD);
// 设置临时存储目录
factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); ServletFileUpload upload = new ServletFileUpload(factory); // 设置最大文件上传值
upload.setFileSizeMax(MAX_FILE_SIZE);
// 设置最大请求值 (包含文件和表单数据)
upload.setSizeMax(MAX_REQUEST_SIZE);
// 中文处理
upload.setHeaderEncoding("UTF-8"); // 构造临时路径来存储上传的文件
// 这个路径相对当前应用的目录,这是tomcat5.6.7能用的
//String uploadPath = request.getServletContext().getRealPath("./") + File.separator + UPLOAD_DIRECTORY;
// 这个路径相对当前应用的目录,这是tomcat8以上能用的
String uploadPath = this.getClass().getClassLoader().getResource("../../").getPath()+ File.separator + UPLOAD_DIRECTORY;
// 如果目录不存在则创建
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdir();
} try {
// 解析请求的内容提取文件数据
@SuppressWarnings("unchecked")
List<FileItem> formItems = upload.parseRequest(request);
if (formItems != null && formItems.size() > 0) {
// 迭代表单数据
for (FileItem item : formItems) {
// 处理不在表单中的字段
if (!item.isFormField()) {
String fileName = new File(item.getName()).getName();
String filePath = uploadPath + File.separator + fileName;
File storeFile = new File(filePath);
// 在控制台输出文件的上传路径
//System.out.println(filePath);
answer=filePath;
// 保存文件到硬盘
item.write(storeFile);
//request.setAttribute("message","文件上传成功!");
}
}
}
} catch (Exception ex) {
System.out.println("erro in Excel2DbServlet excelUpload()"+ex.getMessage());
}
return answer;//"服务器上excel文件地址"或者"Error"字符;
} //根据xlsFilePath对应的xls文件,将其内容读取出来,并写入数据库中
protected String excel2Db(String xlsFilePath) throws FileNotFoundException, IOException, BiffException{ //******************************************************************
// 将传递过来路径的xls文件的第一个sheet的内容拼接为字符串
//******************************************************************
// 1、构造excel文件输入流对象
String sFilePath = xlsFilePath;
InputStream is = new FileInputStream(sFilePath);
// 2、声明工作簿对象
Workbook rwb = Workbook.getWorkbook(is);
// 3、获得工作簿中工作表的个数,对应于一个excel中的工作表个数
rwb.getNumberOfSheets();//一般只用第一个sheet //---------------------------------------------
//如下内容需要根据excel模板以及excel表进行相应的修改
String theData="";//最后用于插入数据表语句insert的值
Sheet oFirstSheet = rwb.getSheet(0);// 使用索引形式获取第一个工作表,也可以使用rwb.getSheet(sheetName);其中sheetName表示的是工作表的名称
//System.out.println("工作表名称:" + oFirstSheet.getName());
int rows = oFirstSheet.getRows();//获取工作表中的总行数
int columns = oFirstSheet.getColumns();//获取工作表中的总列数
//System.out.println(rows+" "+columns+"\r\n");
//所有内容都做字符处理
for (int i = 1; i < rows; i++) {//模板中的第一行作为标题行
theData+="(";
for (int j = 0; j < columns; j++) {//
Cell oCell= oFirstSheet.getCell(j,i);//需要注意的是这里的getCell方法的参数,第一个是指定第几列,第二个参数才是指定第几行
theData+="'"+oCell.getContents()+"',";//将单元格内容提取、拼接至theData
}
theData+="'123456',";//初始密码为123456
theData = theData.substring(0, theData.length() - 1);//获得了excel值
theData+="),";
}
theData = theData.substring(0, theData.length() - 1);//获得了excel值,并拼接为字符串,类似于
//('楚留香','chuliuxiang'),('胡铁花','hutiehua') //******************************************************************
//下面需要将theData写入数据库,这里需要根据写入数据表字段的需求进行修改
//******************************************************************
//1.构建数据库处理对象
DbUtil db=new DbUtil();
//2.构建完整的insert语句
String sql = "insert into hm_user (userName,userId,site,department,sex,birthday,password) values "+theData ;
int rs = db.executeUpdate(sql);
String result="Error";
if(rs>=0){
result="success";
} return result;
} }

(45条消息) jsp+servlet上传excel并将数据导入到数据库表的实现方法_jiannywang的专栏-CSDN博客_jsp导入excel到数据库

jsp+servlet上传excel并将数据导入到数据库表的实现方法的相关教程结束。

《jsp+servlet上传excel并将数据导入到数据库表的实现方法.doc》

下载本文的Word格式文档,以方便收藏与打印。