如何从hibernate提供程序知道底层数据库名称

use*_*081 12 java hibernate

我正在使用hibernate 3.x和Jboss.目前我们支持多个数据库.

现在在运行时,我如何知道底层数据库信息?至少名称或数据库方言?(例如MySQL,Derby,Oracle等)?

任何人都可以建议任何方式来查找这些信息吗?我以为hibernate SessionFactory类会提供这样的api - 但它不是吗?

提前致谢,

jav*_*y79 9

我想你可以这样做:

sessionFactory.getCurrentSession().connection().getMetaData().getURL()
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此方法会在不关闭连接的情况下创建已放弃的连接. (3认同)

use*_*081 8

非常感谢javamonkey79和costis回答这个问题.

是的 - 我可以阅读hibernate.properties/cfg.xml文件 - 但我想避免文件阅读工作流程.

似乎Session::connection()api现在已被弃用,但它仍然有效.我们还可以通过下面列出的其他方式检索相同的信息.

选项1

Session session = sessionFactory.openSession();
String dbURL = session.connection().getMetaData().getURL().toString();
session.close();
Run Code Online (Sandbox Code Playgroud)

方案2

Settings settings = ((SessionFactoryImpl) sessionFactory).getSettings();
if (settings != null) {
    Connection connection = settings.getConnectionProvider().getConnection();
    String dbURL  = connection.getMetaData().getURL();
    connection.close();
}
Run Code Online (Sandbox Code Playgroud)

对于MySql,返回URL的格式为:

jdbc:mysql://localhost:3306/edm?useUnicode=true
Run Code Online (Sandbox Code Playgroud)


Cos*_*lis 1

由于您有 hibernate.properties 或 hibernate.cfg.xml,因此您始终可以从这些文件中读取任何信息。