我正在使用Hibernate 3.x和Jboss。 目前我們支持多個數據庫。如何從休眠提供程序知道底層數據庫名稱
現在在運行時,我怎麼能知道底層的數據庫信息?至少是名字還是數據庫方言? (例如MySQL,Derby,Oracle等)?
任何人都可以建議任何方式來找到這些信息? 我以爲hibernate的SessionFactory類會提供這樣的API - 但它不是?
由於提前,
我正在使用Hibernate 3.x和Jboss。 目前我們支持多個數據庫。如何從休眠提供程序知道底層數據庫名稱
現在在運行時,我怎麼能知道底層的數據庫信息?至少是名字還是數據庫方言? (例如MySQL,Derby,Oracle等)?
任何人都可以建議任何方式來找到這些信息? 我以爲hibernate的SessionFactory類會提供這樣的API - 但它不是?
由於提前,
既然你有一張hibernate.properties或hibernate.cfg.xml文件中,你可以閱讀永諾關閉這些文件的任何信息。
我認爲你可以這樣來做:
sessionFactory.getCurrentSession().connection().getMetaData().getURL()
請注意,此方法會在不關閉的情況下創建一個廢棄的連接。 – DanielK 2016-09-27 12:31:47
非常感謝javamonkey79和斯特凡諾爲應對這一問題。
是的 - 我可以讀取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
sessionFactory.getDialect();
給你Dialect
和
sessionFactory.getSettings().getConnectionProvider().getConnection().getMetaData().getURL();
爲您提供連接網址。
注意:這隻與SessionFactoryImpl
類的工作,不與接口
或者你可以嘗試:
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];
我希望這將是我可以看到所有Hibernate屬性的一種方式,但它似乎只在從文件hibernate.cfg.xml中讀取配置時才起作用。我使用Spring來配置Hibernate,因此它不起作用。任何想法如何訪問由Spring創建的SessionFactoryImpl? – 2015-04-12 04:21:21
,你可以試試這個代碼:
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];
;)
可能的重複:http://stackoverflow.co m/questions/821466/how-can-i-get-the-database-name -i-am-connected-through-hibernate – javamonkey79 2010-12-04 01:55:39