[英]Accessing oracle database via SID through JDBC without host:port
當我尋找有關如何通過JDBC連接到oracle數據庫的信息時,我只找到了相同的解決方案,它們顯示了如何與已知的host:port連接。 我必須傳遞這個連接字符串
jdbc:oracle:thin:[user/password]@[host][:port]:SID
到JDBC,這可行。
protected Connection connect()
{
Connection conn;
try
{
Class.forName(oracle.jdbc.OracleDriver.class.getCanonicalName());
}
catch (ClassNotFoundException e)
{
return null;
}
try
{
conn = DriverManager.getConnection("jdbc:oracle:thin:@1.1.1.1:1536:sid", "user", "passwd");
}
catch (SQLException e)
{
return null;
}
return conn;
}
這種方法的問題是,我必須找出數據庫在哪個host:port上。 當我使用PL/SQL Developer
類的數據庫工具或其他工具時,他們不需要此工具。 僅提示用戶輸入數據庫名稱,該工具仍然可以通過某種方式連接。 所以我想知道這是怎么做到的。 目前,我通過要求路徑中包含tnsping
來實現此目的,並且在提供連接URL的輔助類(在上面的示例代碼中未顯示)中,我調用tnsping
並解析輸出。 這確實不是一個好方法,我想知道是否有適當的連接方法。
您將無法使用普通的JDBC(瘦驅動器)進行操作。 您可以嘗試使用OCI,它顯然可以理解TNS條目。
對於給定的ORACLE_SID,諸如SQL Developer之類的數據庫工具將從位於$ORACLE_HOME/network/admin/
tnsname.ora
文件中獲取其余信息。 該文件包含其余的連接信息,例如
ORA11 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORA11)
)
)
JDBC驅動程序不查找該文件,因此不會僅僅通過提供SID進行連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.