【发布时间】:2018-09-12 08:55:55
【问题描述】:
我通过提供正确的 URL、用户和密码,使用 java 代码连接到 Oracle 11g/12c。 但是现在我想要通过java代码成功连接后像11g/12c这样的oracle版本。
请帮忙解决一下。
【问题讨论】:
我通过提供正确的 URL、用户和密码,使用 java 代码连接到 Oracle 11g/12c。 但是现在我想要通过java代码成功连接后像11g/12c这样的oracle版本。
请帮忙解决一下。
【问题讨论】:
除了查询数据库,这些信息也由 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 是否属于这种情况)。
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production。我想在大多数情况下,主要/次要就足够了
您可以使用以下代码获取版本详细信息,
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。
【讨论】: