使用 UCanAccess 通过 JDBC 获取数据库名称

Posted

技术标签:

【中文标题】使用 UCanAccess 通过 JDBC 获取数据库名称【英文标题】:Get the Database name through JDBC with UCanAccess 【发布时间】: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”,这不是我的数据库名称。 【参考方案1】:

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

conn.getMetaData().getURL()

例如,

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

【讨论】:

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

以上是关于使用 UCanAccess 通过 JDBC 获取数据库名称的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot / Data 通过 jdbc UCanAccess 连接到 MS Access

使用 UCanAccess 代替 JDBC-ODBC Bridge 来读取 excel 表

JDBC 调用中的参数无效:参数索引超出范围(使用 Ucanaccess)

Java 错误 - net.ucanaccess.jdbc.UcanaccessSQLException:格式错误的字符串:'

Hibernate - 使用 net.ucanaccess.jdbc.UcanaccessDriver 时出现 org.hibernate.MappingException

java.lang.ClassNotFoundException:net.ucanaccess.jdbc.ucanaccessDriver