Sql 如何通过Hibernate获取数据库版本?

Sql 如何通过Hibernate获取数据库版本?,sql,database,hibernate,Sql,Database,Hibernate,有没有办法通过Hibernate 3.2 API获取底层数据库版本的一些信息?我在这里和javadoc中都找不到相关的位 获取数据库引擎的版本是特定于实现的。这意味着没有获取版本的共享方法,因此Hibernate不能真正提供API,因为它没有绑定到任何特定的RDBMS。例如,以下是从一些著名的RDBMS获取SELECT语句版本的几种不同方法: Oracle:从v$version中选择* SQL Server:选择@@version MySQL:选择版本() 您可以创建一个报告版本的视图,然

有没有办法通过Hibernate 3.2 API获取底层数据库版本的一些信息?我在这里和javadoc中都找不到相关的位

获取数据库引擎的版本是特定于实现的。这意味着没有获取版本的共享方法,因此Hibernate不能真正提供API,因为它没有绑定到任何特定的RDBMS。例如,以下是从一些著名的RDBMS获取SELECT语句版本的几种不同方法:

  • Oracle:从v$version中选择*
  • SQL Server:选择@@version
  • MySQL:选择版本()

您可以创建一个报告版本的视图,然后将其添加到ORM中,ORM将作为任何其他Hibernate对象进行访问。

一种比公认答案更简单的方法是使用java.sql.DatabaseMetaData类:

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();
        }
    }

}
try(Session Session=sessionFactory.openSession()){
会话.工作(连接->{
DatabaseMetaData=connection.getMetaData();
System.out.println(“产品版本:+metaData.getDatabaseProductVersion());
System.out.println(“主版本:+metaData.getDatabaseMajorVersion());
System.out.println(“次要版本:+metaData.getDatabaseMinorVersion());
});
}
对于我的MySQL 5.5实例,这将输出:

Product version: 5.5.62-log
Major version: 5
Minor version: 5

产品版本与SELECT version()返回的值相同

非常感谢您提供如此详细的解释。我将尝试你提出的方法。应该很容易,因为我只需要支持Oracle和MySQL。