技术总结下:
1、使用jackcess来粗略读取*.accdb数据文件;
2、基于反射,将读取的粗粒数据进行解析。

不多说了,直接贴自己写的代码:

public static <T> String parseAccdbToObject(Class<T> clazz, Table table) {// 校验数据if(null == table) {return new BaseReturn(BaseResultCode.ERROR_CODE_500, "文件数据为空!").toJSONString();}Field[] fields = clazz.getDeclaredFields();T t = null;JSONArray ja = new JSONArray();JSONObject msg_jBean_accdbCBean = new JSONObject();for(Row model: table) {try {t = clazz.newInstance();} catch(InstantiationException e) {return new BaseReturn(BaseResultCode.ERROR_CODE_500, "clazz参数对象异常" + clazz.getName() + "的实体类中没有【无参构造方法】").toJSONString();} catch (IllegalAccessException e) {return new BaseReturn(BaseResultCode.ERROR_CODE_500, "clazz参数对象异常" + clazz.getName() + "的实体类中没有【无参构造方法】").toJSONString();}for (Field field : fields) {ExcelPropertyJade epj = field.getAnnotation(ExcelProperty.class);if(null == epj || !epj.isImport()) {// 排除部分不导入数据continue;}field.setAccessible(true);String fieldNameFinal = field.getName();String fieldName = fieldNameFinal.replaceFirst(fieldNameFinal.substring(0, 1), fieldNameFinal.substring(0, 1).toUpperCase());String propertyName = field.getAnnotation(ApiModelProperty.class).value();Class<?> beanType = field.getType();Method m = null;try {m = field.getDeclaringClass().getMethod("set"+fieldName, beanType);}catch(NoSuchMethodException e) {msg_jBean_accdbCBean.put(propertyName + "=&=" + fieldNameFinal, "该对象属性没有set方法");continue;}String beanTypeStr = String.valueOf(beanType);beanTypeStr = beanTypeStr.substring(beanTypeStr.lastIndexOf(".")+1);String tableColumnTypeStr = table.getColumn(propertyName).getType().name();// 返回数据映射时的错误信息JSONObject jo = JSONObject.parseObject(rejectValueToObjectByMapping(beanTypeStr, tableColumnTypeStr, model, propertyName, t, m));if(jo.isEmpty())continue;msg_jBean_accdbCBean.put(propertyName + "=&=" + fieldNameFinal, jo);}if(!msg_jBean_accdbCBean.isEmpty()) {return new BaseReturn(BaseResultCode.ERROR_CODE_500, msg_jBean_accdbCBean).toJSONString();}if(null == t) {return new BaseReturn(BaseResultCode.ERROR_CODE_500, BaseResultCode.ERROR_MSG_500_PROCESS).toJSONString();}else {ja.add(t);}}return new BaseReturn(BaseResultCode.SUCCESS_MSG_200, ja).toJSONString("yyyy-MM-dd HH:mm:ss");
}/** <b>类型过滤器:</b>* 已生成java对象和accdb数据文件中的【属性—字段】类型映射后,赋值给引用对象* @param beanTypeStr            (String)java属性* @param tableColumnTypeStr    (String)access中字段类型* @param enrollModel          access中的Row数据* @param propertyName         access中的Row数据的key* @param t                        对象引用,读取后的数据通过引用赋给对象* @param m                       对象的set方法* @return*/
private static <T> String rejectValueToObjectByMapping(String beanTypeStr, String tableColumnTypeStr,Row model, String propertyName, T t, Method m) {
//      accessType:TEXT、DOUBLE、BOOLEAN、LONG
//      ZoneId zoneId = ZoneId.systemDefault();JSONObject msg_jBean_accdbCBean = new JSONObject();try {switch (beanTypeStr) {case "Double": m.invoke(t, model.getDouble(propertyName)); break;case "Long":    m.invoke(t, Long.valueOf(model.getString(propertyName))); break;case "int":       m.invoke(t, model.getInt(propertyName)); break;case "String": m.invoke(t, model.getString(propertyName)); break;case "boolean": m.invoke(t, model.getBoolean(propertyName)); break;case "Date":
//          ZonedDateTime zdt = enrollModel.getLocalDateTime(model.getString(propertyName)).atZone(zoneId);
//          Date date = Date.from(zdt.toInstant());String dateStr = model.getString(propertyName);Date date = DateUtil.parseDatePlus(dateStr);m.invoke(t, date); break;default : msg_jBean_accdbCBean.put("error", "类型过滤器需要新增一个Javabean:" + beanTypeStr);break;}} catch (IllegalAccessException IllegalAccessE) {msg_jBean_accdbCBean.put("IllegalAccessException", "Javabean异常。Javabean为:" + beanTypeStr + ",而AccdbCBean为:" + tableColumnTypeStr);} catch (IllegalArgumentException IllegalArgumentE) {msg_jBean_accdbCBean.put("IllegalArgumentException", "Javabean异常。Javabean为:" + beanTypeStr + ",而AccdbCBean为:" + tableColumnTypeStr);} catch (InvocationTargetException InvocationTargetE) {msg_jBean_accdbCBean.put("InvocationTargetException", "Javabean异常。Javabean为:" + beanTypeStr + ",而AccdbCBean为:" + tableColumnTypeStr);} catch (ParseException IllegalAccessE) {msg_jBean_accdbCBean.put("ParseException", "时间解析异常;");} catch (ClassCastException ClassCastE) {msg_jBean_accdbCBean.put("ClassCastException", "Javabean异常。Javabean为:" + beanTypeStr + ",而AccdbCBean为:" + tableColumnTypeStr);}return msg_jBean_accdbCBean.toJSONString();
}

*.accdb数据文件的数据解析工具类相关推荐

  1. java解析mdb文件_Access MDB文件解析查询,Access数据库解析工具类MdbUtils

    Access MDB文件解析查询,Access数据库解析工具类MdbUtils ================================ ©Copyright 蕃薯耀 2018年9月18日 h ...

  2. 基于Excel的VDS记录数据文件查看及转换工具(转MDA格式)

    一.XXXX当前采用VDS软件作为4S店及售后配套使用软件,该软件可读取车辆控制器的版本信息.读取/清除故障码信息. 与此同时VDS软件还可以实时读取及记录车辆控制器的运行参数数据,通过查看记录数据可 ...

  3. Java操作百万数据量Excel导入导出工具类(程序代码教程)

    Java操作百万数据量Excel导入导出工具类(程序代码教程): # 功能实现1.自定义导入数据格式,支持配置时间.小数点类型(支持单/多sheet)(2种方式:本地文件路径导入(只支持xls.xls ...

  4. java解析comtrade文件_一种COMTRADE二进制数据文件的快速解析方法与流程

    本发明涉及电子系统录波领域,更具体地,涉及一种COMTRADE二进制数据文件的快速解析方法. 背景技术: 近年来,随着电子技术的快速发展,电力系统暂态录波明显向高采样率.连续稳态记录和海量存储的趋势发 ...

  5. java 自定义json解析注解 复杂json解析 工具类

    java 自定义json解析注解 复杂json解析 工具类 目录 java 自定义json解析注解 复杂json解析 工具类 1.背景 2.需求-各式各样的json 一.一星难度json[json对象 ...

  6. [Android开发] Json解析工具类,一个类搞定Json的解析

    一.简介 利用递归的方式反射解析到bean里面 二.详细代码 1. Json格式 例如服务器指定规定json格式为: {"code": "--" , // 返回 ...

  7. Java XML解析工具类

    Java XML解析工具类 Java解析XML的方式有很多,这里不一一说明了,利用三方jar包,实现了一个XML工具类 本身是有个需求,讲三方公司的XML请求文件中的Response里的属性赋值成ja ...

  8. 一文吃透Json解析工具类合集(FastJson、Jackson、Gson)

    Json解析工具类 前言 一.各个JSON技术的简介 1.1 FastJson角色 1.2 Jackson角色 1.3 Gson角色 二.使用步骤 2.1 引入库 1.FastJson依赖 2.Jac ...

  9. php解析命令行参数选项,PHP 命令行参数解析工具类的示例代码

    PHP 命令行参数解析工具类的示例代码 /** * 命令行参数解析工具类 * @author guolinchao */ class CommandLine { // 临时记录短选项的选项值 priv ...

  10. R语言导入数据文件(数据导入、加载、读取)、使用read.table函数导入逗号分割文件CSV(Comma Delimited Text File)

    R语言导入数据文件(数据导入.加载.读取).使用read.table函数导入逗号分割文件CSV(Comma Delimited Text File) 目录

最新文章

  1. 使用PCAST检测散度以比较GPU和CPU结果
  2. *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
  3. A - Supercentral Point CodeForces - 165A
  4. SpringMvc CharacterEncodingFilter 解析 encoding 参数并初始化参数
  5. 探索startActivity流程及在Activity间是如何传递Intent的
  6. 如何处理error message Invalid parametertype used at function XXXX
  7. Facebook黄毅博士:像加工艺术品一样构建技术产品
  8. c#怎么设置一个字符串中某个字符的颜色
  9. C++之文件操作探究(二):读文件——文本文件
  10. 伍德里奇计量经济学第三章课后计算机作业,伍德里奇---计量经济学第7章部分计算机习题详解(STATA)...
  11. php7 ob get contents,关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
  12. 网课题库收录API接口以及免费网课查询API接口
  13. jsp调用getParameterValues获取表单信息
  14. Oracle以甲乙丙丁来排列
  15. 《Python基础教程》PDF
  16. google翻译出错什么原因?翻译英文页面时中文闪了下就显示“翻译出错请重试”
  17. 马云被骗十亿?最后却被百倍奉还。
  18. Python:利用多种方式解微分方程(以二阶微分系统零状态响应为例)
  19. 孙子兵法——三十六计
  20. 最短路径(迪杰斯特拉、弗洛伊德含代码)

热门文章

  1. shell检查语法模式
  2. Ubuntu下安装使用Xfce4
  3. WSL2中使用VcXsrv实现xfce4图形界面
  4. Android AbsoluteLayout 绝对布局应用场景介绍
  5. 第145期:2017天猫双11总交易额1682亿,背后阿里绝密50+技术揭秘!
  6. 移动市场平台MTK和android谁会笑到最后
  7. ***基础___探测技术
  8. 4000套plc编程案例欧姆龙、三菱、施耐德、松下、台达、西门子
  9. 文件服务器导出共享文件列表,服务器共享文件访问记录方法、共享文件操作日志记录功能实现...
  10. Windows安装MySQL报错:由于找不到msvcr120.dll无法继续执行代码