<%@ 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并将数据导入到数据库表的实现方法的更多相关文章

  1. 将Excel数据导入mysql数据库的几种方法

    将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...

  2. JSP && Servlet | 上传文件

    在WebContent下新建index.jsp 要点: 1.  表单 method 属性应该设置为 POST 方法,不能使用 GET 方法. 2.  表单 enctype 属性应该设置为 multip ...

  3. 基于Spring MVC实现基于form表单上传Excel文件,批量导入数据

    在pom.xml中引入: <!--处理2003 excel--> <dependency> <groupId>org.apache.poi</groupId& ...

  4. 把excel中的数据导入到数据库

    import.php <?php header("Content-Type:text/html;charset=utf-8"); echo '<html> < ...

  5. Excel、记事本数据导入到数据库

    将手机号批量导入数据库.思路:先将要导入的文件传上项目里,然后读取文件的每行数据并插入数据库,操作完后再将上传的文件删除 文件示例: Excel: 记事本:   前台代码: <div class ...

  6. Springboot(九).多文件上传下载文件(并将url存入数据库表中)

    一.   文件上传 这里我们使用request.getSession().getServletContext().getRealPath("/static")的方式来设置文件的存储 ...

  7. SQL语句:把Excel文件中数据导入SQL数据库中的方法

    1.从Excel文件中,导入数据到SQL数据库情况一.如果接受数据导入的表不存在 select * into jd$ from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ...

  8. excel表里的数据导入到数据库里

    采用的是jxl,所以需要导jxl-2.4.2.jar的jar包.(前提知道excel表的目录): //用log记录异常信息 private static final Logger log = Logg ...

  9. 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的路由方案,与原来的方案在使用上差别不 ...

随机推荐

  1. 【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)节点值, ...

  2. Chapter04 运算符(Operator)

    Chapter04 运算符 目录 Chapter04 运算符 4.1 算数运算符 4.2 关系运算符 4.3 逻辑运算符 4.4 赋值运算符 4.5 三元运算符 4.6 运算符的优先级 4.7 标识符 ...

  3. 二进制部署1.23.4版本k8s集群-1-系统安装及环境准备

    1. 致谢 这篇文章参考了老男孩王导的视频,在此表示感谢和致敬! 2. 安装CentOS操作系统 系统镜像:CentOS-7-x86_64-DVD-2009.iso 安装过程略. 3. 环境准备 3. ...

  4. yum源出现 AppStream‘ 缓存失败,忽略这个 repo。同步仓库 ‘base‘ 缓存失败,忽略这个 repo 的问题解决办法

    今天安装Wget时出现如下错误 到 /etc/yum.repos.d/目录下编辑CentOS-Base.repo ,更改为如下内容. vim CentOS-Base.repo # CentOS-Bas ...

  5. LGP5824口胡

    万 恶 之 源 十 二 重 计 数 法 先鸽子了 球有序,盒子有序 答案明显为 \(m^n\). 球有序,盒子有序,每个盒子最多放一个 答案明显为 \(\binom{m}{n}n!\). 球有序,盒子 ...

  6. 从此 Typora 代码块有了颜色

    起因 平时喜欢用typora记笔记,但是typora默认代码块没有指定语言,没有高亮看着很不舒服,所以用Autohotkey花了半天写了个脚本,按自己的快捷键就可以自动生成代码块并添加语言,这样就方便 ...

  7. 用iptables封杀内网的bt软件

    我所在的网络情况是这样的!1台FC3和3台win2000组成一个局域网!四台机都接在100m的交换机上.在FC3上有两个网卡eth0接外网 adsl eth1接在交换机.FC3做nat带3台win20 ...

  8. 7月2日 Django注册页面的form组件

    forms.py里注册页面的form组件 # Create your views here. class RegForm(forms.Form): username = forms.CharField ...

  9. web安全常用端口

    21 FTP 22 SSH 23 Telent 25 SMTP 53 DNS 80 HTTP 135 139 443 HTTPS 445 SMB 1433 SQLSERVER 1521 ORCAL 3 ...

  10. 文字图片在wps中清晰化方法

    在wps中双击图片出属性,然后再选择文字增强.选择对比增加即可.