【问题标题】:How to check oracle database version after connection in java code如何在java代码中连接后检查oracle数据库版本
【发布时间】:2018-09-12 08:55:55
【问题描述】:

我通过提供正确的 URL、用户和密码,使用 java 代码连接到 Oracle 11g/12c。 但是现在我想要通过java代码成功连接后像11g/12c这样的oracle版本。

请帮忙解决一下。

【问题讨论】:

    标签: java oracle jdbc


    【解决方案1】:

    除了查询数据库,这些信息也由 JDBC 驱动程序提供,通过DatabaseMetaData

    Connection con = DriverManager.connect(...);
    DatabaseMetaData meta = con.getMetaData();
    int majorVersion = meta.getDatabaseMajorVersion();
    int minorVersion = meta.getDatabaseMinorVersion();
    

    例如Oracle 11.2 将导致 majorVersion=11minorVersion=2

    【讨论】:

    • getDatabaseProductVersion() 可能会提供更多信息(但不确定 Oracle 是否属于这种情况)。
    • @MarkRotteveel:这是真的,但它返回一个很难解析的字符串,例如:Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production。我想在大多数情况下,主要/次要就足够了
    【解决方案2】:

    您可以使用以下代码获取版本详细信息,

    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.DriverManager;
    
    public class TestDatabaseMetaDataToolDatabaseInformation {
      public static void main(String[] args) {
        Connection conn = getOracleConnection();
        DatabaseMetaData meta = conn.getMetaData();
        // Oracle (and some other vendors) do not support
        // some the following methods; therefore, we need
        // to use try-catch block.
        try {
          int majorVersion = meta.getDatabaseMajorVersion();
          System.out.println("major Version: " + majorVersion);
          int minorVersion = meta.getDatabaseMinorVersion();
          System.out.println("minorVersion" + minorVersion);
          String productName = meta.getDatabaseProductName();
          String productVersion = meta.getDatabaseProductVersion();
          System.out.println("productName" + productName);
          System.out.println("productVersion" + productVersion);
        } catch (SQLException e) {
          System.out.println("minorVersion unsupported feature");
          System.out.println("major Version: unsupported feature");
        } finally {
            conn.close();
        }
      }
    
      public static Connection getOracleConnection() throws Exception {
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:databaseName";
        String username = "name";
        String password = "password";
        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
      }
    
    }
    

    【讨论】:

    • 您在每个方法周围重复的catch (Exception e) 是 1) 不必要的(鉴于这些是实现所需的 JDBC 功能,如果它们失败,后续调用也将失败,所以一个 try-catch 围绕所有就足够了)和2)当更具体的异常(在本例中为SQLException)就足够了时,不要捕获Exception
    【解决方案3】:

    你可以使用下面的sql

    SELECT * FROM V$VERSION

    https://community.oracle.com/thread/2250946

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多