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

时间:2011-04-04 15:40:01

标签: sql database hibernate

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

3 个答案:

答案 0 :(得分:1)

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

  • Oracle :SELECT * FROM v $ version;
  • SQL Server :SELECT @@ version
  • MySQL :SELECT VERSION()
  • ...

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

答案 1 :(得分:0)

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

}

答案 2 :(得分:0)

比接受的答案更简单的方法是使用 java.sql.DatabaseMetaData 类:

    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() 返回的值相同;