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