【问题标题】:Get the Database name through JDBC with UCanAccess使用 UCanAccess 通过 JDBC 获取数据库名称
【发布时间】:2015-12-10 17:29:15
【问题描述】:

编辑:

我正在测试我在另一篇文章中找到的代码以查找数据库名称:

public static String getDBname(Connection conn) {
    String result = null;
    int i = 0;
    try {
        ResultSet rs = conn.getMetaData().getCatalogs();

        while (rs.next()) {
            System.out.println(rs.getString(i));
            i ++;
        }

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return result;
}

但是它只是返回了这个错误:

net.ucanaccess.jdbc.FeatureNotSupportedException: Feature not supported.
at net.ucanaccess.jdbc.UcanaccessDatabaseMetadata.getCatalogs(UcanaccessDatabaseMetadata.java:310)

还有其他方法可以做到这一点吗?

【问题讨论】:

  • "Feature not supported" 对我来说似乎很清楚。
  • 顺便说一句:要获得“当前选定的数据库”,您需要调用 getCatalog() 而不是 getCatalogs()
  • @a_horse_with_no_name 我确实尝试使用conn.getCatalog(),但它只是返回了“PUBLIC”,这不是我的数据库名称。

标签: java jdbc ucanaccess


【解决方案1】:

对于 UCanAccess,“数据库名称”只是 .accdb 或 .mdb 文件的名称。可以通过从返回的连接 URL 中提取它来检索

conn.getMetaData().getURL()

例如,

jdbc:ucanaccess://C:/Users/Public/UCanAccessTest.accdb;memory=false

【讨论】:

  • 您好,感谢您的回复。我知道我可以使用该结果中的子字符串来获取它,但我只想知道是否有更简单的方法可以使用“UCanAccessTest”来获取数据库名称
  • 我不知道。正如您所注意到的,Connection#getCatalog() 始终返回“PUBLIC”,它与 HSQLDB 后备数据库相关,而不是与 Access 数据库本身相关。
  • 你说得对,戈德。而且我应该在公开一个有意义的目录名称之前实现一些棘手的事情,即,它实际上应该作为目录工作。不在这个阶段,请使用子字符串;-)
猜你喜欢
  • 2014-04-25
  • 1970-01-01
  • 2010-10-23
  • 2011-08-06
  • 1970-01-01
  • 2020-03-03
  • 1970-01-01
  • 2012-09-27
相关资源
最近更新 更多