使用poi读取Excel数据并插入数据库中 报了错 谁能帮忙看下啊

Cindy林雨霏 2014-01-24 12:04:51
package org.cupd.spdb.report.importexcel.dao.impl;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.cupd.spdb.report.importexcel.dao.CardBinDao;

import com.websurf.spdb.bo.DBConnBOImpl;

public class CardBinDaoImpl implements CardBinDao {

private static final Log log=LogFactory.getLog(CardBinDaoImpl.class);
private static DBConnBOImpl dbConn = new DBConnBOImpl();
PreparedStatement ps = null;
Connection conn = null;
ResultSet rs = null;
private String filePath="E:\\Microsoft Excel.xlsx";

/**
* 插入数据
*/
public boolean insertDB(){
boolean flag=true;
try {
//文件流指向excel文件
// FileInputStream fin=new FileInputStream(filePath);
XSSFWorkbook workbook=new XSSFWorkbook(filePath);//创建工作薄
XSSFSheet sheet=workbook.getSheetAt(0);//得到工作表
XSSFRow row=null;//对应excel的行
XSSFCell cell=null;//对应excel的列

int totalRow=sheet.getLastRowNum();//得到excel的总记录条数
log.info("得到excel的总记录数"+totalRow);
//以下的字段一一对应数据库表的字段
String cardName="";
String cardType="";
String cardBin="";
String cardLength="";
String activityCode="";
String note="";
String sql ="insert into BizCardBin(cardName,cardType,cardBin,cardLength,activityCode,note) values(?,?,?,?,?,?)";
for(int i=2;i<=totalRow;i++){
row=sheet.getRow(i);
cell=row.getCell((short) 0);
cardName=cell.getStringCellValue().toString();
cell=row.getCell((short) 1);
cardType=cell.getStringCellValue().toString();
cell=row.getCell((short) 2);
cardBin=cell.getStringCellValue().toString();
cell=row.getCell((short) 3);
cardLength=cell.getStringCellValue().toString();
cell=row.getCell((short) 4);
activityCode=cell.getStringCellValue().toString();
cell=row.getCell((short) 5);
note=cell.getStringCellValue().toString();
conn=dbConn.getConnection();
log.info("获取JDBC连接完成");
ps=conn.prepareStatement(sql);
ps.setString(1,cardName);
ps.setString(2,cardType);
ps.setString(3,cardBin);
ps.setString(4,cardLength);
ps.setString(5,activityCode);
ps.setString(6,note);

ps.execute();
System.out.println("preparestatement successful");
}
dbConnClose(conn, dbConn);
psClose(ps, rs);

} catch (FileNotFoundException e) {
flag=false;
e.printStackTrace();
} catch(IOException ex){
flag=false;
ex.printStackTrace();
} catch(SQLException exx){
flag=false;
exx.printStackTrace();
}

return flag;
}
public static void main(String[] args) {
CardBinDaoImpl e=new CardBinDaoImpl();
e.insertDB();
}


/**
* 插入数据 只需要传入插入sql即可
* 插入sql的样例:insert into t_department values('D004','金融部');
* @param insert 插入语句
* @return
* @throws SQLException
*/
/*public int insertCardBin(BizCardBin cardBin){
int result=0;
PreparedStatement ps = null;
Connection conn = null;
String sql ="insert into BizCardBin(cardName,cardTyoe,cardBin,cardLength,cardLength,activityCode,note) values(?,?,?,?,?,?,?)";
try {
conn=dbConn.getConnection();
log.info("获取JDBC连接完成");
ps = conn.prepareStatement(sql);
ps.setString(1, cardBin.getCardName());
ps.setString(2, cardBin.getCardType());
ps.setString(3, cardBin.getCardBin());
ps.setString(4, cardBin.getCardLength());
ps.setString(5, cardBin.getActivityCode());
ps.setString(6, cardBin.getNote());
result = ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
log.error("SQL Exception "+ e);
e.printStackTrace();
return 0;
}finally{
dbConnClose(conn, dbConn);
psClose(ps, rs);
}
return result;
}
*/

public void dbConnClose(Connection conn,DBConnBOImpl dbConn){
if(conn!=null){
dbConn.close(conn);
}
}

private static void psClose(final PreparedStatement preparedStatement,
final ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
}
if (preparedStatement != null) {
preparedStatement.close();
}
} catch (SQLException e) {
log.error("error", e);
}
}

}
...全文
182 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
螃蟹哥哥 2014-01-24
  • 打赏
  • 举报
回复
我建议你还是用文件流创建试一下,报错位置是在37行就报错了,那么这里的创建应该就出问题了
Cindy林雨霏 2014-01-24
  • 打赏
  • 举报
回复
引用 6 楼 firein 的回复:
换个.xls 也就是excel2003的文件试试
换了没用啊 都试了
Cindy林雨霏 2014-01-24
  • 打赏
  • 举报
回复
引用 9 楼 jimmy609 的回复:
引用 8 楼 u013409147 的回复:
[quote=引用 7 楼 jimmy609 的回复:] 你这段代码我在本地执行了,是没有问题的,XSSFWorkbook workbook=new XSSFWorkbook(filePath);//创建工作薄 这段代码报错,估计是jar包冲突了,你检查下jar包
我看了一下没有重复引用JAR包啊 还有其他的可能吗
你加入了哪些包,截个图出来看看呢[/quote]太多了 要好多张图呢
咖啡加糖_ 2014-01-24
  • 打赏
  • 举报
回复
引用 8 楼 u013409147 的回复:
引用 7 楼 jimmy609 的回复:
你这段代码我在本地执行了,是没有问题的,XSSFWorkbook workbook=new XSSFWorkbook(filePath);//创建工作薄 这段代码报错,估计是jar包冲突了,你检查下jar包
我看了一下没有重复引用JAR包啊 还有其他的可能吗
你加入了哪些包,截个图出来看看呢
Cindy林雨霏 2014-01-24
  • 打赏
  • 举报
回复
引用 7 楼 jimmy609 的回复:
你这段代码我在本地执行了,是没有问题的,XSSFWorkbook workbook=new XSSFWorkbook(filePath);//创建工作薄 这段代码报错,估计是jar包冲突了,你检查下jar包
我看了一下没有重复引用JAR包啊 还有其他的可能吗
咖啡加糖_ 2014-01-24
  • 打赏
  • 举报
回复
你这段代码我在本地执行了,是没有问题的,XSSFWorkbook workbook=new XSSFWorkbook(filePath);//创建工作薄 这段代码报错,估计是jar包冲突了,你检查下jar包
firein 2014-01-24
  • 打赏
  • 举报
回复
换个.xls 也就是excel2003的文件试试
fuzeqiang 2014-01-24
  • 打赏
  • 举报
回复
用SXSSFWorkbook或者HXSSFWorkbook试试。你的jdk是那个版本的?
Cindy林雨霏 2014-01-24
  • 打赏
  • 举报
回复
引用 3 楼 firein 的回复:

FileInputStream fileInput = new FileInputStream(filepath);;
XSSFWorkbook workbook = new XSSFWorkbook(fileInput);
不行啊 还是报错呢
firein 2014-01-24
  • 打赏
  • 举报
回复

FileInputStream fileInput = new FileInputStream(filepath);;
XSSFWorkbook workbook = new XSSFWorkbook(fileInput);
Cindy林雨霏 2014-01-24
  • 打赏
  • 举报
回复
引用 1 楼 crab890715 的回复:
我建议你还是用文件流创建试一下,报错位置是在37行就报错了,那么这里的创建应该就出问题了
该怎么写啊 文件流?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧