如何在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=11
和 minorVersion=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数据库版本的主要内容,如果未能解决你的问题,请参考以下文章