如何在Java代码中连接Oracle数据库后检查其版本

3
我正在使用Java代码连接到Oracle 11g/12c,提供正确的URL、用户名和密码。但是现在我想要在成功连接后获取Oracle版本号,例如11g/12c。
请帮忙实现这个功能。
3个回答

5
除了查询数据库外,JDBC驱动程序还通过DatabaseMetaData提供该信息。
Connection con = DriverManager.connect(...);
DatabaseMetaData meta = con.getMetaData();
int majorVersion = meta.getDatabaseMajorVersion();
int minorVersion = meta.getDatabaseMinorVersion();

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

1
getDatabaseProductVersion() 可能会提供更多信息(不确定 Oracle 是否适用)。 - Mark Rotteveel
@MarkRotteveel:这是真的,但它返回一个非常难以解析的字符串,例如:Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production。我想对于大多数情况来说,主/次版本号应该就足够了。 - user330315

4
您可以使用以下代码获取版本详细信息,
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) 是不必要的。这些都是必需的 JDBC 功能来实现的,如果它们失败了,后续调用也会失败,所以一个 try-catch 包装所有内容就足够了。此外,当更具体的异常(例如 SQLException)足够时,不要捕获 Exception - Mark Rotteveel

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接