2

当我在寻找有关如何通过 JDBC 连接到 oracle 数据库的信息时,我只找到了相同的解决方案,这些解决方案显示了如何与已知的主机:端口连接。我必须通过这个连接字符串

 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;
}

但是,这种方法的问题是,我必须找出数据库在哪个主机:端口上。当我使用类似PL/SQL Developer或其他的数据库工具时,他们不需要这个。仅提示用户输入数据库名称,并且该工具仍然可以以某种方式连接。所以我想知道这是怎么做到的。目前,我通过要求tnsping在路径中和在提供连接 URL 的帮助程序类(上面的示例代码中未显示)中实现这一点,我调用tnsping并解析输出。这不是一个真正的好方法,我想知道是否有合适的连接方式。

4

2 回答 2

1

您将无法使用普通的 JDBC(瘦驱动程序)。您可以尝试使用 OCI,它显然会理解 TNS 条目。

于 2013-07-17T14:57:47.363 回答
0

对于给定的 ORACLE_SID,SQL Developer 等数据库工具从tnsname.ora位于$ORACLE_HOME/network/admin/. 该文件包含其余的连接信息,例如

ORA11 =
 (DESCRIPTION = 
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = ORA11)
 )
)

JDBC 驱动程序不查找此文件,因此不会仅通过提供 SID 进行连接。

参考:
Tnsnames.ora - Oracle 常见问题解答

于 2013-07-17T15:04:45.917 回答