首先需要了解一些基本概念:
-
JSP:Java Server Pages,是一种基于Java技术的动态网页开发技术,可以用来创建动态生成的HTML、XML或其他格式文档。
-
Excel:一种电子表格处理软件,可以用来以表格形式展示、计算和管理数据。
-
数据库:是一个存储数据的集合,在Web应用中通常使用关系型数据库,例如MySQL、Oracle等。
实现JSP上传excel并将其中数据插入到数据库的方法,可以按照以下步骤进行:
- 在JSP页面中添加用于上传excel文件的表单,并为表单指定action和method属性。示例代码如下:
<!DOCTYPE html>
<html>
<head>
<title>Upload Excel</title>
</head>
<body>
<form action="upload.jsp" method="post" enctype="multipart/form-data">
Select file to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload" name="submit">
</form>
</body>
</html>
- 在上传页面的对应JSP文件中,使用Java的Apache POI库来解析上传的excel文件,并将其中数据插入到数据库中。示例代码如下:
<%@ page import="java.sql.*,java.util.*,java.io.*,org.apache.poi.ss.usermodel.*" %>
<%@ page import="org.apache.poi.xssf.usermodel.XSSFWorkbook,org.apache.poi.hssf.usermodel.HSSFWorkbook,org.apache.poi.ss.usermodel.DataFormatter" %>
<%
//连接数据库
Class.forName("com.mysql.jdbc.Driver");//使用MySQL时要加这一句
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase","root","password");
PreparedStatement ps=null;
//获取上传文件
String fileName="",fileType="",fileContent="";
String savePath=getServletContext().getRealPath("upload");//指定上传文件的保存路径
File fileSaveDir=new File(savePath);
if(!fileSaveDir.exists()){
fileSaveDir.mkdir();
}
FileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload upload=new ServletFileUpload(factory);
List<FileItem> items=upload.parseRequest(request);
for(FileItem item:items){
if(!item.isFormField()){
fileName=new File(item.getName()).getName();//获取上传文件的文件名
fileType=fileName.substring(fileName.lastIndexOf(".")+1);//获取上传文件的文件类型
File file=new File(savePath,fileName);//创建上传文件的路径和文件
item.write(file);//将上传文件写入到指定路径
}
}
//将excel文件中数据插入到数据库
FileInputStream is=new FileInputStream(new File(savePath+"/"+fileName));
if(fileType.equalsIgnoreCase("xls")){
HSSFWorkbook wb=new HSSFWorkbook(is);//处理.xls格式的excel文件
Sheet sheet=wb.getSheetAt(0);//获取第一个工作表
Iterator<Row> iterator=sheet.iterator();//获取所有行
while(iterator.hasNext()){
Row currentRow=iterator.next();//获取一行数据
Iterator<Cell> cellIterator=currentRow.iterator();//获取该行所有单元格
List<String> rowValues=new ArrayList<String>();//用于存储该行中所有单元格的值
while(cellIterator.hasNext()){
Cell currentCell=cellIterator.next();//获取一个单元格
DataFormatter dataFormatter=new DataFormatter(Locale.US);
String cellValue=dataFormatter.formatCellValue(currentCell);//获取该单元格的值
rowValues.add(cellValue);//将该单元格的值添加到该行的值列表中
}
ps=conn.prepareStatement("insert into mytable(col1,col2,col3) values(?,?,?)");//预处理插入数据的sql语句
ps.setString(1,rowValues.get(0));
ps.setString(2,rowValues.get(1));
ps.setString(3,rowValues.get(2));//将该行的值列表中的所有值插入到数据库中
ps.executeUpdate();//执行插入操作
}
wb.close();
}
else if(fileType.equalsIgnoreCase("xlsx")){
XSSFWorkbook wb=new XSSFWorkbook(is);//处理.xlsx格式的excel文件
Sheet sheet=wb.getSheetAt(0);//获取第一个工作表
Iterator<Row> iterator=sheet.iterator();//获取所有行
while(iterator.hasNext()){
Row currentRow=iterator.next();//获取一行数据
Iterator<Cell> cellIterator=currentRow.iterator();//获取该行所有单元格
List<String> rowValues=new ArrayList<String>();//用于存储该行中所有单元格的值
while(cellIterator.hasNext()){
Cell currentCell=cellIterator.next();//获取一个单元格
DataFormatter dataFormatter=new DataFormatter(Locale.US);
String cellValue=dataFormatter.formatCellValue(currentCell);//获取该单元格的值
rowValues.add(cellValue);//将该单元格的值添加到该行的值列表中
}
ps=conn.prepareStatement("insert into mytable(col1,col2,col3) values(?,?,?)");//预处理插入数据的sql语句
ps.setString(1,rowValues.get(0));
ps.setString(2,rowValues.get(1));
ps.setString(3,rowValues.get(2));//将该行的值列表中的所有值插入到数据库中
ps.executeUpdate();//执行插入操作
}
wb.close();
}
//关闭数据库连接等资源
ps.close();
conn.close();
%>
以上代码中,使用了Apache POI库来解析上传的excel文件,将其转换为java数据类型,然后通过JDBC将数据插入到数据库中。其中insert into mytable(col1,col2,col3) values(?,?,?)是插入数据的sql语句,mytable、col1、col2、col3等要替换为真实的表名和字段名。
最后,我们需要在web.xml文件中配置文件上传的最大大小和最大请求大小。示例代码如下:
<web-app>
<!-- 文件上传相关 -->
<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>maxFileSize</param-name>
<param-value>5242880</param-value>
</init-param>
<init-param>
<param-name>maxRequestSize</param-name>
<param-value>20971520</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/upload/*</url-pattern>
</servlet-mapping>
</web-app>
此配置文件中,maxFileSize指定了上传文件的最大大小(单位为字节),maxRequestSize指定了最大请求大小。
参考示例:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP上传excel及excel插入至数据库的方法 - Python技术站