有没有一种方式可以通过Hibernate 3.2 API获取底层数据库版本的一些信息?我在这里和javadoc上都没有找到相关的内容。
通过一些解包可能实现:
Session hibSession = ... // session is taken from wherever is possible
String dbVersion = hibSession.unwrap(SharedSessionContractImplementor.class)
.getJdbcCoordinator()
.getLogicalConnection()
.getPhysicalConnection()
.getMetadata()
.getDatabaseProductVersion();
还有可用于主/次版本的单独方法,以及JDBC协议版本、DB供应商名称等。
try (Session session = sessionFactory.openSession()) {
session.doWork(connection -> {
DatabaseMetaData metaData = connection.getMetaData();
System.out.println("Product version: " + metaData.getDatabaseProductVersion());
System.out.println("Major version: " + metaData.getDatabaseMajorVersion());
System.out.println("Minor version: " + metaData.getDatabaseMinorVersion());
});
}
对于我的MySQL 5.5实例,这将输出:
Product version: 5.5.62-log
Major version: 5
Minor version: 5
产品版本与 SELECT VERSION() 返回的值相同。
public static void testConnection() {
Session session = null;
try {
session = getSessionFactory().openSession();
session.doWork(connection -> {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT VERSION()");
resultSet.next();
System.out.println("DB test: " + resultSet.getString(1));
});
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}