读书人

POI读取EXCEL文件导入数据库源程序(源

发布时间: 2012-01-10 21:26:51 作者: rapoo

POI读取EXCEL文件导入数据库源程序(源码),关于用户各自导入EXCEL的问题!
fs = new POIFSFileSystem(new FileInputStream( "c:\\AAA.xls ")); =====这么写,将路径写死,发现每个用户导入的都是服务器上的EXCEL文件,原来我以为导入的都是用户机器上C盘下的AAA.xls文件,请问如何使每个用户导入他们各自的EXCEL文件?应该怎么写?

以下是POI的源程序:
package poi;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;


public class POITest {
public static Connection conn = null;
public static Statement stmt = null;
public static boolean connectDB2() {
try {
Class.forName( "org.gjt.mm.mysql.Driver ");
String url = "jdbc:mysql://localhost:3306/dstore ";
conn = DriverManager.getConnection(url, "root ", "111111 ");
stmt = conn.createStatement();
}
//捕获加载驱动程序异常
catch (ClassNotFoundException cnfex) {
System.err.println( "装载JDBC驱动程序失败。 ");
cnfex.printStackTrace();
return false;
}
//捕获连接数据库异常
catch (SQLException sqlex) {
System.err.println( "无法连接数据库 ");
sqlex.printStackTrace();
//System.exit(1); // terminate program
return false;
}
return true;
}

public static boolean readExcelToDB2(String userName) {
POIFSFileSystem fs = null;
HSSFWorkbook wb = null;
try {
fs = new POIFSFileSystem(new FileInputStream( "c:\\AAA.xls ")); =====这么写,将路径写死,发现每个用户导入的都是服务器上的EXCEL文件,原来我以为导入的都是用户机器上C盘下的AAA.xls文件,请问如何使每个用户导入他们各自的EXCEL文件?应该怎么写?
wb = new HSSFWorkbook(fs);
} catch (IOException e) {
e.printStackTrace();
return false;
}
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = null;
HSSFCell cell = null;
String name = " ";
long aa =0;
String company = " ";
long phone =0;
long mobile =0;
String email = " ";
String zu = " ";
int rowNum, cellNum;
int i;


rowNum = sheet.getLastRowNum();
for (i = 1; i <= rowNum; i++) {
row = sheet.getRow(i);
//cellNum = row.getLastCellNum();
try{
cell = row.getCell((short) 0);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
name = cell.getStringCellValue().trim();

name=new String(name.getBytes( "GBK "), "latin1 ");
}catch(Exception e){

}

try{
cell = row.getCell((short) 1);
aa = (long) cell.getNumericCellValue();
}catch(Exception e){

}

String sql = "insert into listuser(username,password) values( ' "+name+ " ', ' "+aa+ " ') ";
try {
stmt.executeUpdate(sql);
} catch (SQLException e1) {
e1.printStackTrace();
return false;
}
}
return true;
}
}

-------------------------------
以下是调用POI的JSP程序:
<%
String username = " ";
if(session.getAttribute( "username ")!=null)
username = session.getAttribute( "username ").toString();
if (!username.equals( " ")) {
%>
<%} else {%>
<% response.sendRedirect( "index.jsp ");%>
<%}%>
<%@page contentType= "text/html;charset=GB2312 "%>

<%@ page import= "poi.POITest "%>
<%
String uusermobile=request.getParameter( "username ");
boolean connectToDB = POITest.connectDB2();
if(connectToDB){
boolean tureOrfalse = POITest.readExcelToDB2(uusermobile);

if (tureOrfalse==true){
out.println( "数据导入成功 ");
}else{
out.println( "数据导入失败 ");
}
}else{
out.println( "连接数据库失败! ");
}
%>

------------------------------

请问如何使每个用户导入他们各自的EXCEL文件?应该怎么写?

[解决办法]
HSSFWorkbook wb = new HSSFWorkbook();
POIFSFileSystem fs = null;
FileInputStream fis = null;
try {
fis = new FileInputStream( "c:\\workbook.xls ");//本地路径

fs = new POIFSFileSystem(fis);
wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow(0);
HSSFCell cell = null;
cell = row.getCell((short) 0);
System.out.println(cell.getStringCellValue());
FileOutputStream fileOut = new FileOutputStream( "D:\\workbook.xls ");//上传路径
wb.write(fileOut);
fileOut.close();
} catch (FileNotFoundException e) {


// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
[解决办法]
估计楼主是搞得b/s模式,你得先让用户上传他本地的Excel文件!

后台程序都是在服务器跑得,不可能取客户机的文件操作,要不就是病毒木马了。
[解决办法]
先实现上传
再导入

我用jxl就是这么实现的,
但是,上传的文件要重命名,防止用户上传相同的文件名
另外,导入结束后,别忘了把上传的文件删除,要不时间久了,上传文件的目录会很大、特大、以及超大

读书人网 >Java Web开发

热点推荐