java实现excel表格导入数据库表
导入excel就是一个上传excel文件,然后获取excel文件数据,然后处理数据并插入到数据库的过程
一、上传excel
前端jsp页面,我的是index.jsp
在页面中我自己加入了一个下载上传文件的功能,其中超链接就是下载
<%@ 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<script type="text/javascript" src="jquery/1.7.2/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="jquery/jquery.form.js"></script>
<script type="text/javascript">
function test1(){
var form = new FormData(document.getElementById("uploadForm"));
$.ajax({
contentType:"multipart/form-data",
url:"servlet/UploadHandleServlet",
type:"post",
async:false,
data:form,
dataType:"json",
processData: false, // 告诉jQuery不要去处理发送的数据
contentType: false, // 告诉jQuery不要去设置Content-Type请求头
success:function(data){
var result=eval(data);
var filePath=result[0].filePath;
//alert(filePath);
var fileName = result[0].imageName;
$("#download").attr("href","servlet/DownLoadServlet?filePath="+filePath);
document.getElementById("download").innerHTML = fileName;
//上传文件后得到路径,然后处理数据插入数据库表中
importExcel(filePath);
}
});
}
function importExcel(filePath){
$.ajax({
url:"${pageContext.request.contextPath}/user/insertUserByExcelPath",
type:"post",
data:{"filePath":filePath},
success:function(data){
}
});
}
</script>
<body>
导入excel表格
<form id="uploadForm" action="" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>上传文件:</td>
<td>
<input type="file" name="fileName" id="fileName"/>
</td>
</tr>
</table>
</form>
<button id="uploadFile" onclick="test1();">确定</button>
<!-- servlet/DownLoadServlet -->
上传的文件<a id="download" href=""></a>
</body>
</html>
后端的上传的servlet,其中需要commons-fileupload-1.2.1.jar的支持,然后我的保存路径savePath是自己写的一个配置文件来的,这里可以写上自己的上传文件所保存的路径就行,返回的是一个json,包括文件路径还有文件名
二、处理excel表格并得到含有Javabean的list
在用ajax调用servlet上传文件后得到路径和文件名,然后进行excel数据处理,在前端的页面上调用importExcel()的js函数,传入刚刚得到的文件路径
我这里用的是ssm框架中的controller(我自己也学习一下),这里也可以用servlet,或者Struts等。能访问到后端服务就行。
这里是controller中的代码,主要数据处理在Excel2Bean.getBeanByExcelPath(filePath, User.class)这个方法中
这里就说说Excel2Bean.getBeanByExcelPath(filePath, User.class)这个方法
从excel表格中获取数据然后转换成一个javaBean的list集合,代码中操作excel表格需要用到的jar poi-ooxml-3.9-20121203.jar,poi-3.9-20121203.jar,poi-ooxml-schemas-3.9-20121203.jar,为什么要用到这些jar,因为在有些之前的版本的poi中可能对word的版本不能兼容,网上具体有说到这个。最好是用org.apache.poi.ss.usermodel.Workbook这个来操作excel,poi各种版本官网下载可以参考微博https://mp.csdn.net/postedit/83620739。对于getBeanByExcelPath这个方法使用到了泛型,也使用到了一点点的反射的东西,获取一个类的属性,并给属性赋值。代码中有方法测试这个获取Javabean的属性并赋值的方法。这个方法也是为了能更通用一点,适用于更多的javabean,更多的表。当然excel的表头就要用到Javabean中的属性名称了。如果对泛型不是很了解的可以学习一下,当然也可以先看里面的readExcel(filePath)这个方法,是一个固定的Javabean对象
代码如下
三、插入数据库
得到excel转换成Javabean的list对象后然后插入到数据库中。我这里用的是ssm里面的一些操作,我自己可能都解释不清楚。反正得到数据,然后往数据库插入数据这个操作也可以用其他方式的,框架也好,jdbc连接数据库直接去执行sql也好,都OK。
最后贴一下下载上传的文件的servlet代码
还有User.java这个javabean、
浙公网安备 33010602011771号