先上代码
public static void excelToDb(String excelpath,String table , String fieldList,int columnCount)throws Exception {
Connection conn = null;
PreparedStatement ps = null;
Workbook workbook = null;
Sheet sheet = null;
conn = DButils.getIntance().getConnec();
//关键就是workbook 和 sheet这两个类了,一个先得到文件,之后通过sheet的cell函数得到行列对应的元素
String sql = "insert into " + table + fieldList + " values(";
//通过传来的参数拼接好sql语句
for(int i=1;i<columnCount;i++) {
sql+="?,";
}
sql+="?)";
ps = conn.prepareStatement(sql);
workbook = Workbook.getWorkbook(new File(excelpath));
sheet = workbook.getSheet(0);
int r = sheet.getRows();
for(int i=0;i<r;i++) {
for(int j=0;j<columnCount;j++) {
ps.setString(j+1, sheet.getCell(j, i).getContents());
//getCell(x,y)第y行的第x列 行列反过来了,有点小别扭
}
ps.addBatch();
}
ps.executeBatch();
//batch操作 批量更新,将操作通过addbatch集中起来最后直接通过上面的函数执行,提高效率
workbook.close();
DButils.getIntance().close(conn, ps, null);
}
ServletContext sc = ServletActionContext.getServletContext();
String dir = sc.getRealPath("/upload");
//这个使用于文件上传的时候,把上传的文件存放到项目下的upload文件夹里面,而上面的代码是获取upload在项目下的绝对路径
//如果不存在则创建该文件夹
File saveFile = new File(dir,fileFileName);
FileUtils.copyFile(file, saveFile);
String filedList = "(Sid,Susername,Spassword,ClassNum)";
DbToExcel.excelToDb(dir+"/"+fileFileName, "student", filedList, 4);
//复制好文件之后路径就是相对来说固定了(毕竟只有文件名不相同)把完整的路径拼接出来,填好参数直接调用就好了,之后再用struts配置一下就可以使用了
return "success";