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的路由方案,与原来的方案在使用上差别不 ...
随机推荐
- linux文本编辑工具
文本编辑工具VIM vim 主要有三种工作模式,分别是命令模式.插入模式和编辑模式,输入 vim 文件名 我们可以进入命令模式,输入字符 i或者a或者o我们可以进入插入模式,进入插入模式之后我们可以进 ...
- ASP.NET Core 6框架揭秘实例演示[21]:如何承载你的后台服务
借助 .NET提供的服务承载(Hosting)系统,我们可以将一个或者多个长时间运行的后台服务寄宿或者承载我们创建的应用中.任何需要在后台长时间运行的操作都可以定义成标准化的服务并利用该系统来承载,A ...
- props配置
配置项props 功能:让组件接收外部传过来的数据[相当于微信转账:有一个转账人转钱给接收者,接收者需要确认接收] (1)传递数据: <Demo name="xxx"> ...
- gitee中项目到运行操作,包括:打包、热部署、数据库操作
使用的工具:window10.IDEA 2018.2.3 .navicat110_premium.Git-2.23 1.idea导入gitee代码 复制项目地址 选择git工具 粘贴地址,点击clon ...
- i++ 反编译码
1.特点: 操作数栈,主要用于保存计算过程中的结果,同时作为集计算过程中变量临时的存储空间. 操作数栈就是JVM执行引擎的一个工作区,当方法执行开始,一个新栈帧也会随之被创建,这个方法的操作数栈是空的 ...
- knative入门指南
尽管Knative自2018年以来一直由社区维护,但最近一直有关于该项目的传言,因为谷歌最近将Knative提交给了云原生计算基金会(CNCF),作为一个孵化项目考虑. 太酷了!但Knative到底是 ...
- 《前端运维》一、Linux基础--04Shell变量
这一篇文章,我们就要开始学习正式的Shell语言部分的内容.那在开始之前,我们回忆一下,javascript语言,大体都包含了哪些内容?比如数据类型(对象.字符串.数值),数据结构(对象.数组).运算 ...
- chili
靶机准备 首先将靶机ova文件导入 网络模式改为NAT 扫描ip netdiscover -r 192.168.164.0/24 kali:192.168.164.137 渗透测试 扫描端口 nmap ...
- ctf之POST
题目信息如下 可知该题考察post请求知识 直接将what=flag以post传参格式进行传参即可获得flag
- Java 框架、库和软件的精选列表(awesome java)
原创翻译,原始链接 本文为awesome系列中的awesome java Awesome Java Java 框架.库和软件的精选列表 项目 Bean映射 简化 bean 映射的框架 dOOv - 为 ...