java批量导入数据库_java实现excel批量导入 数据到数据库中

();

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

colMap.put(excelFieldNames[i], firstRow.getCell(i).getColumnIndex());

}

// 将sheet转换为list, rowNum从0开始, 总数 = lastNum + 1

int rowCounts = sheet.getLastRowNum() + 1;

for (int i = 3; i < rowCounts; i++) {

// 新建要转换的对象

T entity = entityClass.newInstance();

Row row = sheet.getRow(i);

//避免空行

if(row == null){

continue;

}

// 给对象中的字段赋值

for (Entryentry : fieldMap.entrySet()) {

// 获取英文字段名

String enNormalName = entry.getKey();

// 获取中文字段名

String cnNormalName = entry.getValue();

// 根据中文字段名获取列号

int col = colMap.get(cnNormalName);

String content = null;

// 获取当前单元格中的内容

if(row.getCell(col) != null){

row.getCell(col).setCellType(XSSFCell.CELL_TYPE_STRING);

content = row.getCell(col, Row.CREATE_NULL_AS_BLANK).getStringCellValue();

}

// 给对象赋值

setFieldValueByName(enNormalName, content, entity);

}

resultList.add(entity);

}

}

return resultList;

}

/**

* @MethodName : getFieldByName

* @Description : 根据字段名获取字段

* @param fieldName

* 字段名

* @param clazz

* 包含该字段的类

* @return 字段

*/

private static Field getFieldByName(String fieldName, Class> clazz) {

// 拿到本类的所有字段

Field[] selfFields = clazz.getDeclaredFields();

// 如果本类中存在该字段,则返回

for (Field field : selfFields) {

if (field.getName().equals(fieldName)) {

return field;

}

}

// 否则,查看父类中是否存在此字段,如果有则返回

Class> superClazz = clazz.getSuperclass();

if (superClazz != null && superClazz != Object.class) {

return getFieldByName(fieldName, superClazz);

}

// 如果本类和父类都没有,则返回空

return null;

}

/**

* @MethodName : setFieldValueByName

* @Description : 根据字段名给对象的字段赋值

* @param fieldName

* 字段名

* @param fieldValue

* 字段值

* @param o

* 对象

*/

private static void setFieldValueByName(String fieldName,

Object fieldValue, Object o) throws Exception {

if(fieldValue == null){

return;

}

Field field = getFieldByName(fieldName, o.getClass());

if (field != null) {

field.setAccessible(true);

// 获取字段类型

Class> fieldType = field.getType();

//trim一下防止类型转换时报错

String fieldValueStr = fieldValue.toString().trim();

// 根据字段类型给字段赋值

if (String.class == fieldType) {

field.set(o, fieldValueStr);

} else if ((Integer.TYPE == fieldType)

|| (Integer.class == fieldType)) {

field.set(o, Integer.parseInt(fieldValueStr));

} else if ((Long.TYPE == fieldType) || (Long.class == fieldType)) {

field.set(o, Long.valueOf(fieldValueStr));

} else if ((Float.TYPE == fieldType) || (Float.class == fieldType)) {

field.set(o, Float.valueOf(fieldValueStr));

} else if ((Short.TYPE == fieldType) || (Short.class == fieldType)) {

field.set(o, Short.valueOf(fieldValueStr));

} else if ((Double.TYPE == fieldType)

|| (Double.class == fieldType)) {

field.set(o, Double.valueOf(fieldValueStr));

} else if (Character.TYPE == fieldType) {

if (fieldValue.toString().length() > 0) {

field.set(o, fieldValue.toString().charAt(0));

}

} else if (Date.class == fieldType) {

field.set(o, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

.parse(fieldValueStr));

} else {

field.set(o, fieldValue);

}

} else {

throw new Exception(o.getClass().getSimpleName() + "类不存在字段名 "

+ fieldName);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值