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

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文件中获取所有的表名,关键代码如下:

    @Test
	public 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、读取指定表信息

    @Test
	public 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的表名,通过表名获取字段名和属性值。希望对你有帮助。

  • 23
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 56
    评论
在C#中,可以使用LMDB.NET库来操作MDB数据库。该库是LMDB的一个C#绑定,提供了一组简单的API来操作MDB数据库。 首先,需要使用LMDB.NET库中的MdbEnvironment类来打开一个MDB环境。环境是一个MDB数据库实例的抽象,它包含了一个或多个数据库文件。例如,下面的代码可以打开一个名为"mydb"的MDB环境: ``` MdbEnvironment env = new MdbEnvironment(); env.Open("mydb"); ``` 接下来,需要使用MdbTransaction类来开始一个数据库事务。事务是一组操作的原子性操作,可以确保操作的一致性和可靠性。例如,下面的代码可以开始一个读写事务: ``` MdbTransaction tx = env.BeginTransaction(TransactionBeginFlags.ReadWrite); ``` 接下来,需要使用MdbDatabase类来打开一个数据库数据库MDB环境中一个命名的数据存储区,其中包含了多个表。例如,下面的代码可以打开一个名为"mytable"的数据库: ``` MdbDatabase db = tx.OpenDatabase("mytable"); ``` 现在,可以使用MdbCursor类来遍历数据库中的数据。游标是一种可以遍历数据库中数据记录的对象,例如,下面的代码可以遍历数据库中的所有数据记录: ``` using (MdbCursor cursor = db.OpenCursor()) { while (cursor.MoveNext()) { // 处理数据记录 } } ``` 在处理数据记录时,可以使用MdbValue类来获取数据记录中的字段值。例如,下面的代码可以获取数据记录中名为"name"的字段值: ``` MdbValue value = cursor.Current.GetFieldValue("name"); string name = value.AsString; ``` 最后,需要使用MdbTransaction类的Commit方法来提交事务,或者Rollback方法来回滚事务。例如,下面的代码可以提交上面创建的事务: ``` tx.Commit(); ``` 总的来说,C#中使用LMDB.NET库来操作MDB数据库主要是通过MdbEnvironment、MdbTransaction、MdbDatabase、MdbCursor和MdbValue这些类来实现的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 56
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜郎king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值