jsp+servlet上传excel并将数据导入到数据库表的实现方法
<%@ 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并将数据导入到数据库表的实现方法的更多相关文章
- 将Excel数据导入mysql数据库的几种方法
将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...
- JSP && Servlet | 上传文件
在WebContent下新建index.jsp 要点: 1. 表单 method 属性应该设置为 POST 方法,不能使用 GET 方法. 2. 表单 enctype 属性应该设置为 multip ...
- 基于Spring MVC实现基于form表单上传Excel文件,批量导入数据
在pom.xml中引入: <!--处理2003 excel--> <dependency> <groupId>org.apache.poi</groupId& ...
- 把excel中的数据导入到数据库
import.php <?php header("Content-Type:text/html;charset=utf-8"); echo '<html> < ...
- Excel、记事本数据导入到数据库
将手机号批量导入数据库.思路:先将要导入的文件传上项目里,然后读取文件的每行数据并插入数据库,操作完后再将上传的文件删除 文件示例: Excel: 记事本: 前台代码: <div class ...
- Springboot(九).多文件上传下载文件(并将url存入数据库表中)
一. 文件上传 这里我们使用request.getSession().getServletContext().getRealPath("/static")的方式来设置文件的存储 ...
- SQL语句:把Excel文件中数据导入SQL数据库中的方法
1.从Excel文件中,导入数据到SQL数据库情况一.如果接受数据导入的表不存在 select * into jd$ from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ...
- excel表里的数据导入到数据库里
采用的是jxl,所以需要导jxl-2.4.2.jar的jar包.(前提知道excel表的目录): //用log记录异常信息 private static final Logger log = Logg ...
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
随机推荐
- [ Skill ] print println printf fprintf sprintf lsprintf
https://www.cnblogs.com/yeungchie/ 几种 print 函数的差异 print 接收任意的数据类型,并打印到 CIW print( 12345 ) ; 12345 pr ...
- 能动的电脑配件「GitHub 热点速览 v.22.11」
看到这个标题就知道硬核的 B 站 UP 主稚晖君又更新了,本次带来的是一个造型可爱的小机器人.除了稚晖君这个一贯硬核的软硬件项目之外,本周也有很多有意思的新项目,像 Linux 服务监控小工具 Ray ...
- 微信公众号客服接口:out of response count limit 的原因
调用客服消息接口返回如下: ...
- tensorflow源码剖析之framework-kernel
目录 什么是kernel kernel_def op_kernel kernel的注册 op_segment 关系图 涉及的文件 迭代记录 1. 什么是kernel 如果说op相当于操作的声明,那么k ...
- 6月16日 Django作业 文件解压缩统计行数
作业要求: 前端页面注意: 自己写的: from django.shortcuts import render, HttpResponse import zipfile import re # Cre ...
- [SPDK/NVMe存储技术分析]013 - libibverbs API应用案例分析
本文是对论文Dissecting a Small InfiniBand Application Using the Verbs API所做的中英文对照翻译 Dissecting a Small Inf ...
- react中使用截图组件Cropper组件
--最近项目用react,学习react并使用cropper组件裁剪图片. (这里开发组件不够统一有用tsx(TypeScript + xml/html)写的组件,有用jsx(javascript+x ...
- netcore后台任务注意事项
开局一张图,故事慢慢编!这是一个后台任务打印时间的德莫,代码如下: using BackGroundTask; var builder = WebApplication.CreateBuilder() ...
- 组合(n选k问题)
#include "iostream.h" #include "string.h" int a[100]; void dfs(int n,int k) { if ...
- SpringBoot starter 作用在什么地方?
依赖管理是所有项目中至关重要的一部分.当一个项目变得相当复杂,管理依赖会成为一个噩梦,因为当中涉及太多 artifacts 了. 这时候 SpringBoot starter 就派上用处了.每一个 s ...