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

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 = 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文件



评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值