将上传的excel文件导入到数据库主要分为以下步骤:
首先,将上传的文件保存到服务器一目录,最好是临时目录。
其次,根据这个目录获取相应的输出流,然后根据输出流和jxl第三方组件获得工作簿的相关信息。
再次,读取生成的工作簿信息,连接数据库,插入数据。
String filePath = "D:/b/a.xls";
//必须保证b目录层次存在,当a文件不存在时才会新建立文件。
FileOutputStream os = new FileOutputStream(filePath);
PRDMAN01000005FORM form = (PRDMAN01000005FORM)actionForm;
FormFile excelfile = form.getExcel();
String name = excelfile.getFileName();
os.write(excelfile.getFileData());
os.flush();
os.close();
FileInputStream is =new FileInputStream(filePath);
//BufferedReader br = new BufferedReader(is);
jxl.Workbook rwb = Workbook.getWorkbook(is);
Sheet rs = rwb.getSheet(0);
//获取第一行,第一列的值
Cell c00 = rs.getCell(0, 0);
String strc00 = c00.getContents();
对于流的引用要注意,要保证目录层次在物理硬盘上存在,文件不存在的话,对于输出流,可以自动生成相应的文件。对于前台的文件上传,也要注意:一是保证提交的method是post,二是要保证enctype属性的值是multipart/form-data.相应的文件数据收集需要根据具体环境具体设置。
以下是示范性的代码,只做参考。。。。。。。。。。。
JAVA文件:ReadExcelTest.java --------------------------------------------------------------
package com.mypack;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFCell; import java.sql.*; import java.io.*; import java.util.ArrayList; import java.sql.Connection;
public class ReadExcelTest { private Connection con; String DBDriver="oracle.jdbc.driver.OracleDriver"; String url="jdbc:oracle:thin:@192.168.0.1:1521:dbname"; String USER="username"; String PWD="password"; private ArrayList listFirstColum = new ArrayList(); private ArrayList listSecondColum = new ArrayList(); //连接数据库 public ReadExcelTest() throws Exception { try { Class.forName(DBDriver); con=DriverManager.getConnection(url,USER,PWD); } catch(Exception e) { e.printStackTrace(); throw(new Exception("Sorry,database connecting failed!")); } } //从excel中读取数据存入ArrayList中 public void readExcel(String sFileName) { try { HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(sFileName));//读取excel文件 HSSFSheet sheet = workbook.getSheetAt(0);//读取第一个sheet for(int i=0;i<=sheet.getLastRowNum();i++)//循环取得所有行 { if(sheet.getRow(i)!=null) { HSSFRow aRow = sheet.getRow(i);//行数 HSSFCell cellFirstColum = aRow.getCell((short)0);//第一列 HSSFCell cellSecondColum = aRow.getCell((short)1);//第二列 //把数据存入list里备用 listFirstColum.add((int)cellFirstColum.getNumericCellValue());//假定第一列为数字型 listSecondColum.add(cellSecondColum.getStringCellValue());//假定第二列为字符串型 } } System.out.println("Excel读取成功!"); }catch(Exception e) { e.printStackTrace(); } } //从ArrayList中把数据写入数据库 public void insertData(String sFileName) { //读取 readExcel(sFileName); String sqlInsert = "insert into tbl_name" +"(first_colum,second_colum)values(?,?)"; //插入 try { for (int i=0;i{ PreparedStatement pstmt=con.prepareStatement(sqlInsert); pstmt.setInt(1, listFirstColum.get(i)); pstmt.setString(2, listSecondColum.get(i).toString()); pstmt.execute(); System.out.println("正在导入第 "+(i+1)+" 条记录"); } System.out.println("导入完毕!"); }catch(Exception e) { e.printStackTrace(); } } }
JSP:test.jsp -----------------------------------------
<%@ page pageEncoding="GB2312"%> <%@ page import="com.mypack.ReadExcelTest" %> <% ReadExcelTest read = new ReadExcelTest(); read.insertData("D://test.xls"); %>