使用 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