天天看点

jsp上传excel到mysql数据库_JSP上传excel及excel插入至数据库的方法

本文实例讲述了JSP上传excel及excel插入至数据库的方法。分享给大家供大家参考。具体如下:

此导入excel是与pojo绑定的,(缺点)excle表头必须是pojo的字段值

1. html页面:

class="easyui-validatebox" required=true

validType="equalLength[4]" missingMessage="文件!" value="" />

data-options="iconCls:'icon-ok'" style="width: 60px"

οnclick="subForm();">OK

data-options="iconCls:'icon-cancel'" style="width: 60px"

οnclick="closeDig();">Cancel

function subForm(){

if($('#myform').form('validate')){

var filepath = $("#filepath").val();

var re = /(\\+)/g;

var filename = filepath.replace(re,"#");

//对路径字符串进行剪切截取

var one = filename.split("#");

//获取数组中最后一个,即文件名

var two = one[one.length-1];

//再对文件名进行截取,以取得后缀名

var three = two.split(".");

//获取截取的最后一个字符串,即为后缀名

var last = three[three.length-1];

//添加需要判断的后缀名类型

var tp = "xls,xlsx";

//返回符合条件的后缀名在字符串中的位置

var rs = tp.indexOf(last);

if(rs != -1){

$("#myform").attr("action","excleImport");

$("#myform").submit();

}else{

$.messager.alert("操作提示", "您选择的上传文件不是有效xls或者xlsx文件!","error");

return false;

}

} else {

$.messager.alert("操作提示", "请选择上传文件!","error");

}

}

2. java代码:

@RequestMapping("/excleImport")

public void excleImport(HttpServletRequest request) throws IOException, Exception {

request.setCharacterEncoding("utf-8"); //设置编码

//获得磁盘文件条目工厂

DiskFileItemFactory factory = new DiskFileItemFactory();

//获取文件需要上传到的路径

String path = request.getRealPath("/upload/kaku");

File uploadDir = new File(path);

if (!uploadDir.exists()) {

uploadDir.mkdirs();

}

factory.setRepository(uploadDir);

//设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室

factory.setSizeThreshold(1024*1024) ;

//高水平的API文件上传处理

ServletFileUpload upload = new ServletFileUpload(factory);

//可以上传多个文件

List list = (List)upload.parseRequest(request);

for(FileItem item : list)

{

//获取表单的属性名字

String name = item.getFieldName();

//如果获取的 表单信息是普通的 文本 信息

if(item.isFormField())

{

//获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的

String value = item.getString() ;

request.setAttribute(name, value);

}

//对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些

else

{

//获取路径名

String value = item.getName() ;

//索引到最后一个反斜杠

int start = value.lastIndexOf("\\");

//截取 上传文件的 字符串名字,加1是 去掉反斜杠,

String filename = value.substring(start+1);

//文件后缀名

String prefix = filename.substring(filename.lastIndexOf(".") + 1);

CardCenter cardCenter = new CardCenter();

request.setAttribute(name, filename);

//真正写到磁盘上

//它抛出的异常 用exception 捕捉

//item.write( new File(path,filename) );//第三方提供的

//手动写的

//OutputStream out = new FileOutputStream(new File(path,filename));

InputStream in = item.getInputStream() ;

List listFromExcel = (List)ExelUtil.exportListFromExcel(in, prefix, cardCenter);

this.cardCenterService.excleImport(listFromExcel);

in.close();

//out.close();

}

}

}

3. java代码:

public class ExelUtil {

//第一列开始

private static int start = 0;

//最后一列序号

private static int end =0;

public static String getSubString(String str){

return str.substring(0,str.lastIndexOf("."));

}

public static List> exportListFromExcel(File file, String fileFormat,Object dtoobj)

throws IOException {

return exportListFromExcel(new FileInputStream(file), fileFormat,dtoobj);

}

public static List> exportListFromExcel(InputStream is,String fileFormat,Object dtoobj) throws IOException {

Workbook workbook = null;

if (fileFormat.equals(BizConstant.XLS)) {

workbook = new HSSFWorkbook(is);

} else if (fileFormat.equals(BizConstant.XLSX)) {

workbook = new XSSFWorkbook(is);

}

return exportListFromExcel(workbook,dtoobj);

}

private static List exportListFromExcel(Workbook workbook ,Object dtoobj) {

List list = new ArrayList();

String[] model = null;

Sheet sheet = workbook.getSheetAt(0);

// 解析公式结果

FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();

int minRowIx = sheet.getFirstRowNum();

int maxRowIx = sheet.getLastRowNum();

for (int rowIx = minRowIx; rowIx <= maxRowIx; rowIx++) {

Object obj = null;

if(rowIx==minRowIx){

start = sheet.getRow(rowIx).getFirstCellNum();

end = sheet.getRow(rowIx).getLastCellNum();

}

Row row = sheet.getRow(rowIx);

StringBuilder sb = new StringBuilder();

for (int i = start; i < end; i++) {

Cell cell = row.getCell(new Integer(i));

CellValue cellValue = evaluator.evaluate(cell);

if (cellValue == null) {

sb.append(BizConstant.SEPARATOR+null);

continue;

}

// 经过公式解析,最后只存在Boolean、Numeric和String三种数据类型,此外就是Error了

// 其余数据类型,根据官方文档,完全可以忽略

switch (cellValue.getCellType()) {

case Cell.CELL_TYPE_BOOLEAN:

sb.append(BizConstant.SEPARATOR + cellValue.getBooleanValue());

break;

case Cell.CELL_TYPE_NUMERIC:

// 这里的日期类型会被转换为数字类型,需要判别后区分处理

if (DateUtil.isCellDateFormatted(cell)) {

sb.append(BizConstant.SEPARATOR + cell.getDateCellValue());

} else {

sb.append(BizConstant.SEPARATOR + cellValue.getNumberValue());

}

break;

case Cell.CELL_TYPE_STRING:

sb.append(BizConstant.SEPARATOR + cellValue.getStringValue());

break;

case Cell.CELL_TYPE_FORMULA:

break;

case Cell.CELL_TYPE_BLANK:

break;

case Cell.CELL_TYPE_ERROR:

break;

default:

break;

}

}

if(rowIx==minRowIx){

String index = String.valueOf(sb);

String realmodel =index.substring(1, index.length());

model =realmodel.split(",");

}else{

String index = String.valueOf(sb);

String realvalue =index.substring(1, index.length());

String[] value =realvalue.split(",");

//字段映射

try {

dtoobj =dtoobj.getClass().newInstance();

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

obj = reflectUtil(dtoobj,model,value);

list.add(obj);

}

}

return list;

}

@SuppressWarnings("deprecation")

private static Object reflectUtil(Object objOne, String[] listName,

String[] listVales) {

Field[] fields = objOne.getClass().getDeclaredFields();

for (int i = 0; i < fields.length; i++) {

fields[i].setAccessible(true);

for (int j = 0; j < listName.length; j++) {

if (listName[j].equals(fields[i].getName())) {

try {

if (fields[i].getType().getName().equals(java.lang.String.class.getName())) {

// String type

if(listVales[j]!=null){

fields[i].set(objOne, listVales[j]);

}else{

fields[i].set(objOne, "");

}

} else if (fields[i].getType().getName().equals(java.lang.Integer.class.getName())

|| fields[i].getType().getName().equals("int")) {

// Integer type

if(listVales[j]!=null){

fields[i].set(objOne, (int)Double.parseDouble(listVales[j]));

}else{

fields[i].set(objOne, -1);

}

}else if(fields[i].getType().getName().equals("Date")){

//date type

if(listVales[j]!=null){

fields[i].set(objOne, Date.parse(listVales[j]));

}

}else if(fields[i].getType().getName().equals("Double")

||fields[i].getType().getName().equals("float")){

//double

if(listVales[j]!=null){

fields[i].set(objOne, Double.parseDouble(listVales[j]));

}else{

fields[i].set(objOne, 0.0);

}

}

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

break;

}

}

}

return objOne;

}

}

希望本文所述对大家的JSP程序设计有所帮助。