MDB格式数据可以用来存储空间信息,也可以用来存储非空间信息。如果用来存储非空间数据的话,跟普通的excel表格及关系型数据库是一样的。您可以使用微软的access数据库直接打开,也可以使用arcgis、或者qgis的地理编辑软件打开。

本文将使用JDBC的方式来讲解如何解析非空间MDB数据,将自动获取表表名和字段名。本例采用arcmap软件打开目标文件。可以看到mdb文件的内容如下:

以上表示该数据不包含空间信息,仅包含属性表信息。

表里面的字段信息如下:

在Java中如何获取到解析这些数据呢?下面教你具体如何来解析。

一、既然要使用jdbc的方式,就要在pom.xml中定义相关依赖

<dependency><groupId>net.sf.ucanaccess</groupId><artifactId>ucanaccess</artifactId><version>4.0.4</version>
</dependency>

二、动态从mdb文件中获取所有的表名,关键代码如下:

    @Testpublic void getAllTables() {try {Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");String accessDb = "F:/vector_data/other/gdal_demo_data/mdb-data/2015phone/20150210mobile.mdb";String dbURL = "jdbc:ucanaccess://" + accessDb;Connection conn = DriverManager.getConnection(dbURL);System.out.println(conn);DatabaseMetaData metadata = conn.getMetaData();ResultSet tables = metadata.getTables(null, null, "%", null);while (tables.next()) {System.out.println(tables.getString(3));}tables.close();conn.close();}catch (Exception e) {e.printStackTrace();}}

运行以上代码即可获取mdb文件中所有管理的表。程序输出如下图所示:

三、动态获取字段名以及每个字段对应的属性值

1、读取指定表信息

    @Testpublic void readTableData() throws Exception {String mdbPath = "F:/vector_data/other/gdal_demo_data/mdb-data/2015phone/20150210mobile.mdb";String mdbSql = "SELECT * FROM mobileinfo";List<Map<String, Object>> list = TestJdbcReadMdbCase.resolverMdb(mdbPath, mdbSql);System.out.println(list.size());}

2、动态获取字段及属性值

/**** @param mdbPath mdb文件路径* @param mdbSql mdb执行sql* @param mdbColumnList mdb查询字段* @return* @throws Exception*/private static List<Map<String, Object>> resolverMdb(String mdbPath, String mdbSql) throws Exception {if (mdbPath.isEmpty() || mdbSql.isEmpty()) {throw new Exception("mdb文件路径不能为空或者SQL语句不能为空或者返回字段列表不能为空");}List<Map<String, Object>> mdbEntityList = new ArrayList<>();Properties prop = new Properties();//设置编码prop.put("charSet", "UTF-8");//数据地址String dbUrl = "jdbc:ucanaccess://" + mdbPath;//引入驱动Class.forName("net.ucanaccess.jdbc.UcanaccessDriver").newInstance();try {//连接数据库资源Connection conn = DriverManager.getConnection(dbUrl, prop);//建立查询事务Statement statement = conn.createStatement();//执行查询ResultSet result = statement.executeQuery(mdbSql);ResultSetMetaData metaData = result.getMetaData();int count = metaData.getColumnCount();List<String> mdbColumnList = new ArrayList<String>(count);//动态解析字段名for (int i = 1; i <= count; i++) {mdbColumnList.add(metaData.getColumnName(i));}//解析执行结果Map<String, Object> mdbMapList = new HashMap<>(16);while (result.next()) {StringBuffer sb = new StringBuffer();for (String col : mdbColumnList) {//System.out.println(result.getObject(col));sb.append(col + "==" + result.getObject(col)).append("\t");mdbMapList.put(col, result.getObject(col));}System.out.println(sb.toString());mdbEntityList.add(mdbMapList);}} catch (Exception e) {e.printStackTrace();}//返回数据return mdbEntityList;}

上述代码跟普通的jdbc是一样的,都是加载驱动,获取结果集,从结果集中获取相应数据。程序输出如下图所示:

总结:本文讲解了在java中使用jdbc的方式来解析非空间mdb数据,并给出了具体的关键代码,包括动态获取mdb的表名,通过表名获取字段名和属性值。希望对你有帮助。

Java解析MDB(上)-纯JDBC解析非空间数据相关推荐

  1. java代码连接jdbc_纯JDBC代码连接实例 + 完整代码

    JDBC连接数据库实例 1. 数据库表 1.1.创建表 CREATE TABLE `users`( `uid` INT NOT NULL AUTO_INCREMENT COMMENT '用户id', ...

  2. Java完美实现access库_Java之纯JDBC连接Access(值得收藏)

    在Java中,解析Access一般来说有2种方式,第一种用JDBC-ODBC桥接的方式解析,第二种用纯JDBC的方式解析. 关于用JDBC-ODBC这种方式的解析,散仙在这里就不在演示了,网上搜一下, ...

  3. SC-Lego-LOAM解析(上)

    文章目录 正文 imageProjection featureAssociation Feature Extraction 正文 SC-Lego-LOAM实际上应该并不对应某一篇特定的论文,而是韩国K ...

  4. 面试官系统精讲Java源码及大厂真题 - 30 AbstractQueuedSynchronizer 源码解析(上)

    30 AbstractQueuedSynchronizer 源码解析(上) 不想当将军的士兵,不是好士兵. 引导语 AbstractQueuedSynchronizer 中文翻译叫做同步器,简称 AQ ...

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

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

  6. shp文件纯前端的上传、解析、编辑、下载

    本文主要讲述一种体量较小的shp文件纯前端的上传.解析.编辑.下载的技术流程,适用于要素量少的shp文件修改操作. 准备工作 下载一下几个包,详细用法请见结尾参考. npm install file- ...

  7. 一个mapper接口有多个mapper.xml 文件_MyBatis 源码解析:映射文件的加载与解析(上)

    上一篇我们分析了配置文件的加载与解析过程,本文将继续对映射文件的加载与解析实现进行分析.MyBatis 的映射文件用于配置 SQL 语句.二级缓存,以及结果集映射等,是区别于其它 ORM 框架的主要特 ...

  8. 如何在Java 8中使用LocalDateTime格式化/解析日期-示例教程

    Java项目中的常见任务之一是将日期格式化或解析为String,反之亦然. 解析日期表示您有一个表示日期的字符串,例如" 2017-08-3",并且要将其转换为表示Java中日期的 ...

  9. 大佬分享:180+道Java面试题目!含答案解析!

    作者:我是offer 链接:https://www.nowcoder.com/discuss/84736 来源:牛客网 大厂常见问题 写视频点播网站文件下载接口 基础变量/数组写出模拟maven导入包 ...

最新文章

  1. HDU7059-Counting Stars 线段树 (区间加最低位置,区间减最高位)
  2. 新闻资讯小程序开发实践
  3. D2 第11届前端技术论坛记录
  4. matlab 随机森林算法_(六)如何利用Python从头开始实现随机森林算法
  5. 通过编程为ASP.NET页面设置缓存
  6. 浅谈BERT/Transformer模型的压缩与优化加速
  7. boost::contract模块实现是否constexpr的测试程序
  8. mysql 执行sql error 2,Mysql:执行source sql脚本时,出现:error 2
  9. MySQL优化详解(一)——硬件和系统优化
  10. 【Get Up&Move】MMD镜头+动作打包下载.zip
  11. MATLAB识别实验,基于MATLAB的人脸识别系统实验报告.pdf
  12. 对幅度谱和相位谱的理解
  13. 微信推送消息通知接口汇总
  14. word如何给多张图片批量添加边框
  15. linux清理dns缓存命令,Ubuntu下清空DNS缓存 提升访问速度
  16. Origin图复制到Word后有大片空白
  17. php移动端可拖动可视化,可视化编辑uniapp项目DIY拖拽
  18. Word中Endnote加载项不见处理办法
  19. 《Photoshop蒙版与合成(第2版)》—第1章合成的历史
  20. 开放api接口平台都会有appid、appkey、appsecret

热门文章

  1. PC端和移动端唤起QQ聊天
  2. 宝塔面板安装完成后无法访问_宝塔面板安装WordPress(超详细)
  3. linux 系统自动关机--排查方法
  4. 20200717-UML类图箭头
  5. 已解决Cannot start compiler The output path is not specified for module untitled
  6. 访问ACCESS数据库OleDbConnection(C#)工具类
  7. Fast and Accurate CNN Object Detector with Scale Dependent Pooling and Cascad Rejection Classifiers
  8. GBase 8a UDF 函数串并行控制基础知识
  9. First Article
  10. MySQL5.7.10 installation for Windows.doc