如何在java代码中连接后检查oracle数据库版本

Posted

技术标签:

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

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

请帮忙解决一下。

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何在java代码中连接后检查oracle数据库版本的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 cassandra 与 pentaho 数据集成器的连接

JAVA建立连接后如何检查数据库是不是存在

如何检查oracle数据库端的socket通信中断

怎么用java连接oracle数据库,需要详细解释

java要和oracle 11g连接该如何配置oracle

如何在java中读取oracle blob