我正在使用Java代码连接到Oracle 11g/12c,提供正确的URL、用户名和密码。但是现在我想要在成功连接后获取Oracle版本号,例如11g/12c。
请帮忙实现这个功能。
请帮忙实现这个功能。
DatabaseMetaData
提供该信息。Connection con = DriverManager.connect(...);
DatabaseMetaData meta = con.getMetaData();
int majorVersion = meta.getDatabaseMajorVersion();
int minorVersion = meta.getDatabaseMinorVersion();
majorVersion=11
和 minorVersion=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)
是不必要的。这些都是必需的 JDBC 功能来实现的,如果它们失败了,后续调用也会失败,所以一个 try-catch 包装所有内容就足够了。此外,当更具体的异常(例如 SQLException
)足够时,不要捕获 Exception
。 - Mark Rotteveel
getDatabaseProductVersion()
可能会提供更多信息(不确定 Oracle 是否适用)。 - Mark RotteveelOracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
。我想对于大多数情况来说,主/次版本号应该就足够了。 - user330315