您的位置:首页 > 数据库

jxl--jsp读取excel文件并将文件存入数据库

2018-03-17 23:24 721 查看

1.说明:

      1.需要jxl.jar、commons-fileUpload-1.3.2.jar、commons-ios-2.5.jar、数据库驱动包mysql-connector-java.bin.jar
      2.表单需要注意的地方:1.method="post" 2.type="File"  3.enctype="multipart/form-data" 设置表单的MIME编码,设置这个属性才能完整上传文件数据。
       3.建立一获取本地Excel文件的表单(getExcel.jsp),建立数据库,建立一个servlet用于处理文件的上传操作(Excelservlet.java),建立一个实体类(entity.java),JDBC.java数据库的链接,
 (分开多个文件层次思路更 清晰)
1.数据库建表以及建立数据链接操作(JDBC.java)



JDBC.java
package com;
import java.sql.*;
public class JDBC {
private static Connection conn =null;
private static Statement st =null;
private static ResultSet rs =null;

public static Connection getConn(){
//数据库连接
try {
Class.forName("com.mysql.jdbc.Driver");//装载驱动
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "9527");
}
catch (SQLException e) {
System.out.println("连接失败,请检查用户名或密码是否正确,或是MySQL数据库是否已经启动");
}
}catch (ClassNotFoundException e) {
System.out.println("驱动程序未找到,请检查是否将驱动程序copy到lib目录!");
}
return conn;
}
public static Statement getSt(){
try {
if(getConn()!=null){
st = conn.createStatement();
}
}
catch (SQLException e) {
}
return st;
}
public static ResultSet select(String sql){
try {
if(getSt()!=null){
rs = st.executeQuery(sql);
}
}
catch (SQLException e) {
System.out.println("sql查询语句异常,请检查你的sql语句:"+sql);
}
return rs;
}

//更新
public static boolean Update(String sql){
boolean flag = false;
try {
if(getSt()!=null){
st.executeUpdate(sql);
flag = true;
close();
}
}
catch (SQLException e) {
System.out.println("sql语句异常,请检查你的sql语句:"+sql);
}
return flag;
}
public static void close(){
try {
if(st!=null){
st.close();
}
if(conn!=null){
conn.close();
}
}
catch (SQLException e) {
System.out.println("关闭失败!");
}
}
}
2.getExcel.jsp(上传页面)
<%@page import="java.io.InputStream"%>
<%@ page language="java"
import="java.util.*,com.*,java.io.*,jxl.*,jxl.read.biff.BiffException,java.sql.*"
pageEncoding="gbk"%>
<%
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("gbk");
%>

<html>
<head>
<title>Excel文件讀取</title>
</head>
<body>
<div align="center">
<form action="Excelservlets" method="post" enctype="multipart/form-data">
<input type="file" name="fileExcel">
<input type="submit" value="導入"/>
</form>

<!-- 用于上显示数据库的数据,上传后显示出来 --> <table border="1" width="50%"> <tr> <th>姓名</th> <th>年齡</th> <th>工資</th> </tr> <% Excel E =new Excel(); ResultSet rs = E.selectAll(); while(rs.next()){ %> <tr> <td><%=rs.getString(1) %></td> <td><%=rs.getInt(2) %></td> <td><%=rs.getString(3) %></td> </tr> <% } %> </table> </div> <%String fa =request.getParameter("fa"); if(fa!=null){ out.print("添加失敗,是否重已複添加"); } %>
</body>
</html>


2.Excelservlets.java(servlet文件)
package Servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import com.Excel;

public class Excelservlets extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=gbk");
response.setCharacterEncoding("gbk");
request.setCharacterEncoding("gbk");
PrintWriter out = response.getWriter();
System.out.println("獲得一個get請求");
//创建一个解析器工厂
DiskFileItemFactory  fu =new DiskFileItemFactory ();
//得到解析器,处理上传的文件数据,并将表单中每个输入项封装成一个FileItem 对象中
ServletFileUpload upload = new ServletFileUpload(fu);
List<FileItem> fileItems;
try {
fileItems = upload.parseRequest(request);//获得表单数据
upload.setHeaderEncoding("gbk");
ArrayList al =new ArrayList();//將文件存到集合中;
al.add(fileItems);

Excel E = new Excel();//new一个对象 让对象调用实体类的方法
for (int i = 0; i < al.size(); i++) {//遍歷集合 取出文件
FileItem item =(FileItem)al.get(i);
InputStream is=item.getInputStream();
Workbook wb;//建立工作簿
try {
wb = Workbook.getWorkbook(is);//得到工作簿
Sheet st = wb.getSheet(0);//得到工作簿中第一個工作表
Cell cell = null;//获得单个对象
//此处行数如果不要第一行就从1开始
for(int m
4000
= 1; m < st.getRows(); m++) {//st.getRows() excel的行數
String[][] ss = new String[st.getRows()][st.getColumns()];
for (int j = 0; j < st.getColumns(); j++) {//st.getColumns() excel中數據表格的列數
cell = st.getCell(j, m);//不要放反了,第一个参数是列数,第二个是行
String str = cell.getContents();//读入一个字符串
ss[m][j] = str;//将单元格添加如数组中
//给对应的字段赋值,当前就写了三个字段
if (j == 0) {//给第一个字段赋值
E.setName(ss[m][j]);
}else if(j==1){//给第二个字段赋值
E.setAge(Integer.parseInt(ss[m][j]));
}else if(j==2){//给第三个字段赋值
E.setGz(ss[m][j]);
}
 }
if(E.add()){//调用实体类的插入方法
if(m==st.getRows()-1){//当循环执行到最后一个时跳转
request.getRequestDispatcher("getexcel.jsp").forward(request, response);
}
}else{
if(m==st.getRows()-1){//当循环执行到最后一个时跳转
request.getRequestDispatcher("getexcel.jsp?fa=ok").forward(request, response);
}
}
}
wb.close();
is.close();

} catch (BiffException e) {
System.out.print("文件格式可能不對");
}
}
out.flush();
out.close();

} catch (FileUploadException e1) {
e1.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=gbk");
response.setCharacterEncoding("gbk");
request.setCharacterEncoding("gbk");
PrintWriter out = response.getWriter();
doGet(request,response);
out.flush();
out.close();
}

}
3.实体类(entity.java)
package com;

import javax.resource.cci.ResultSet;

public class entity{
String name;
int age ;
String gz;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGz() {
return gz;
}
public void setGz(String gz) {
this.gz = gz;
}
public boolean add(){//插入方法
String sql = "insert into excel values('"+name+"','"+age+"','"+gz+"')";
return JDBC.Update(sql);
}
public java.sql.ResultSet selectAll(){//取数据
String sql ="select * from excel";
return JDBC.select(sql);
}

}
4.最后就是取数据了。getExcel.jsp(上传页面)代码在这页面
<!--  用于上显示数据库的数据,上传后显示出来 -->
<table border="1" width="50%">
<tr>
<th>姓名</th>
<th>年齡</th>
<th>工資</th>
</tr>
<%
Excel E =new Excel();
ResultSet rs = E.selectAll();
while(rs.next()){
%>
<tr>
<td><%=rs.getString(1) %></td>
<td><%=rs.getInt(2) %></td>
<td><%=rs.getString(3) %></td>
</tr>
<%
}
%>
</table>
</div>
<%String fa =request.getParameter("fa");
if(fa!=null){
out.print("添加失敗,是否重已複添加");
}
%>


最后插入结果:



.xls文件

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: