簡體   English   中英

在沒有host:port的情況下通過JDBC通過SID訪問oracle數據庫

[英]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進行連接。

參考:
Tnsnames.ora-Oracle常見問題解答

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM