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的路由方案,与原来的方案在使用上差别不 ...
随机推荐
- 【Azure API 管理】使用APIM进行XML内容读取时遇见的诡异错误 Expression evaluation failed. Object reference not set to an instance of an object.
问题描述 使用APIM,在 Inbound 中对请求的Body内容进行解析.客户端请求所传递的Request Body为XML格式,需要从Request Body中解析出多个(Element)节点值, ...
- Chapter04 运算符(Operator)
Chapter04 运算符 目录 Chapter04 运算符 4.1 算数运算符 4.2 关系运算符 4.3 逻辑运算符 4.4 赋值运算符 4.5 三元运算符 4.6 运算符的优先级 4.7 标识符 ...
- 二进制部署1.23.4版本k8s集群-1-系统安装及环境准备
1. 致谢 这篇文章参考了老男孩王导的视频,在此表示感谢和致敬! 2. 安装CentOS操作系统 系统镜像:CentOS-7-x86_64-DVD-2009.iso 安装过程略. 3. 环境准备 3. ...
- yum源出现 AppStream‘ 缓存失败,忽略这个 repo。同步仓库 ‘base‘ 缓存失败,忽略这个 repo 的问题解决办法
今天安装Wget时出现如下错误 到 /etc/yum.repos.d/目录下编辑CentOS-Base.repo ,更改为如下内容. vim CentOS-Base.repo # CentOS-Bas ...
- LGP5824口胡
万 恶 之 源 十 二 重 计 数 法 先鸽子了 球有序,盒子有序 答案明显为 \(m^n\). 球有序,盒子有序,每个盒子最多放一个 答案明显为 \(\binom{m}{n}n!\). 球有序,盒子 ...
- 从此 Typora 代码块有了颜色
起因 平时喜欢用typora记笔记,但是typora默认代码块没有指定语言,没有高亮看着很不舒服,所以用Autohotkey花了半天写了个脚本,按自己的快捷键就可以自动生成代码块并添加语言,这样就方便 ...
- 用iptables封杀内网的bt软件
我所在的网络情况是这样的!1台FC3和3台win2000组成一个局域网!四台机都接在100m的交换机上.在FC3上有两个网卡eth0接外网 adsl eth1接在交换机.FC3做nat带3台win20 ...
- 7月2日 Django注册页面的form组件
forms.py里注册页面的form组件 # Create your views here. class RegForm(forms.Form): username = forms.CharField ...
- web安全常用端口
21 FTP 22 SSH 23 Telent 25 SMTP 53 DNS 80 HTTP 135 139 443 HTTPS 445 SMB 1433 SQLSERVER 1521 ORCAL 3 ...
- 文字图片在wps中清晰化方法
在wps中双击图片出属性,然后再选择文字增强.选择对比增加即可.