我正在使用hibernate 3.x和Jboss。 目前我们支持多个数据库。
现在在运行时,我如何知道底层数据库信息?至少名称或数据库方言? (例如MySQL,Derby,Oracle等)?
任何人都可以建议找到这些信息吗? 我以为hibernate SessionFactory类会提供这样的api - 但它不是吗?
提前致谢,
答案 0 :(得分:9)
我认为你可以这样做:
sessionFactory.getCurrentSession().connection().getMetaData().getURL()
答案 1 :(得分:8)
非常感谢javamonkey79和costis回答这个问题。
是的 - 我可以阅读hibernate.properties/cfg.xml文件 - 但我想避免文件阅读工作流程。
现在似乎已弃用Session::connection()
api,但它仍然有效。
我们还可以通过下面列出的其他方式检索相同的信息。
Session session = sessionFactory.openSession();
String dbURL = session.connection().getMetaData().getURL().toString();
session.close();
Settings settings = ((SessionFactoryImpl) sessionFactory).getSettings();
if (settings != null) {
Connection connection = settings.getConnectionProvider().getConnection();
String dbURL = connection.getMetaData().getURL();
connection.close();
}
对于MySql,返回URL的格式为:
jdbc:mysql://localhost:3306/edm?useUnicode=true
答案 2 :(得分:4)
sessionFactory.getDialect();
为您提供Dialect
和
sessionFactory.getSettings().getConnectionProvider().getConnection().getMetaData().getURL();
为您提供连接网址。
注意:这仅适用于SessionFactoryImpl
类,而不适用于界面
答案 3 :(得分:3)
或者您可以尝试:
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
SessionFactoryImpl sessionFactoryImpl = (SessionFactoryImpl) sessionFactory;
Properties props = sessionFactoryImpl.getProperties();
String url = props.get("hibernate.connection.url").toString();
String[] urlArray = url.split(":");
String db_name = urlArray[urlArray.length - 1];
答案 4 :(得分:3)
最简单的方法是获取当前配置的属性,然后使用键“ hibernate.connection.url”获取您的数据库URL。以下代码显示当前会话的URL
System.out.println(sessionFactory.getProperties().get("hibernate.connection.url"))
在我的系统上,我得到
jdbc:postgresql://localhost:15432/tempdb
答案 5 :(得分:1)
由于你有hibernate.properties或hibernate.cfg.xml,你可以一直读取这些文件中的任何信息。
答案 6 :(得分:1)
你可以试试这段代码:
String url = null;
try {
url = getSession().connection().getMetaData().getURL().toString();
} catch (HibernateException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
String[] urlArray = url.split(":");
String db_name = urlArray[1];
)
答案 7 :(得分:0)
对于Hibernate 5.2.0,要获取数据源。
SessionFactoryImplementor entityManagerFactory = (SessionFactoryImplementor) sessionFactory.openSession().getEntityManagerFactory();
DatasourceConnectionProviderImpl connectionProvider = (DatasourceConnectionProviderImpl) entityManagerFactory.getServiceRegistry().getService(ConnectionProvider.class);
BasicDataSource dataSource = (BasicDataSource) connectionProvider.getDataSource();
dataSource.getUrl();
答案 8 :(得分:0)
答案 9 :(得分:0)
这对我有用:
DataSource dataSource = (DataSource)entityManagerFactory.getProperties()
.get("hibernate.connection.datasource");
Connection connection = dataSource.getConnection();
String databaseName = connection.getCatalog();