通过JDBC通过JDBC访问oracle数据库而不使用host:port

时间:2013-07-17 14:50:28

标签: java oracle jdbc

当我在寻找有关如何通过JDBC连接到oracle数据库的信息时,我只找到了显示如何连接已知主机: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;
}

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

对于给定的ORACLE_SID,SQL Developer等数据库工具会从位于tnsname.ora的{​​{1}}文件中获取其余信息。此文件包含其他连接信息,如

$ORACLE_HOME/network/admin/

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

参考:
Tnsnames.ora - Oracle FAQ