Java解析MDB(上)-纯JDBC解析非空间数据

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

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

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

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

image.png

表里面的字段信息如下:

image.png

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

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

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

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

@TestpublicvoidgetAllTables() {
try {
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
StringaccessDb="F:/vector_data/other/gdal_demo_data/mdb-data/2015phone/20150210mobile.mdb";
StringdbURL="jdbc:ucanaccess://"+accessDb;
Connectionconn=DriverManager.getConnection(dbURL);
System.out.println(conn);
DatabaseMetaDatametadata=conn.getMetaData();
ResultSettables=metadata.getTables(null, null, "%", null);
while (tables.next()) {
System.out.println(tables.getString(3));
            }
tables.close();
conn.close();
        }catch (Exceptione) {
e.printStackTrace();
        }
    }

   运行以上代码即可获取mdb文件中所有管理的表。

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

   1、读取指定表信息

@TestpublicvoidreadTableData() throwsException {
StringmdbPath="F:/vector_data/other/gdal_demo_data/mdb-data/2015phone/20150210mobile.mdb";
StringmdbSql="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*/privatestaticList<Map<String, Object>>resolverMdb(StringmdbPath, StringmdbSql) throwsException {
if (mdbPath.isEmpty() ||mdbSql.isEmpty()) {
thrownewException("mdb文件路径不能为空或者SQL语句不能为空或者返回字段列表不能为空");
       }
List<Map<String, Object>>mdbEntityList=newArrayList<>();
Propertiesprop=newProperties();
//设置编码prop.put("charSet", "UTF-8");
//数据地址StringdbUrl="jdbc:ucanaccess://"+mdbPath;
//引入驱动Class.forName("net.ucanaccess.jdbc.UcanaccessDriver").newInstance();
try {
//连接数据库资源Connectionconn=DriverManager.getConnection(dbUrl, prop);
//建立查询事务Statementstatement=conn.createStatement();
//执行查询ResultSetresult=statement.executeQuery(mdbSql);
ResultSetMetaDatametaData=result.getMetaData();
intcount=metaData.getColumnCount();
List<String>mdbColumnList=newArrayList<String>(count);
//动态解析字段名for (inti=1; i<=count; i++) {
mdbColumnList.add(metaData.getColumnName(i));
           }
//解析执行结果Map<String, Object>mdbMapList=newHashMap<>(16);
while (result.next()) {
StringBuffersb=newStringBuffer();
for (Stringcol : 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 (Exceptione) {
e.printStackTrace();
       }
//返回数据returnmdbEntityList;
   }

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

image.png

总结

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

目录
相关文章
|
1月前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
140 3
|
1月前
|
Java
Java的CAS机制深度解析
CAS(Compare-And-Swap)是并发编程中的原子操作,用于实现多线程环境下的无锁数据同步。它通过比较内存值与预期值,决定是否更新值,从而避免锁的使用。CAS广泛应用于Java的原子类和并发包中,如AtomicInteger和ConcurrentHashMap,提升了并发性能。尽管CAS具有高性能、无死锁等优点,但也存在ABA问题、循环开销大及仅支持单变量原子操作等缺点。合理使用CAS,结合实际场景选择同步机制,能有效提升程序性能。
|
27天前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
257 0
|
23天前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
338 100
|
2月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
2月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
2月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践
|
18天前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
1月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
111 16
|
27天前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
114 1

热门文章

最新文章

推荐镜像

更多
  • DNS