当我在寻找如何通过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
并解析输出。这不是一个很好的方法,我想知道是否有合适的连接方式。
您将无法使用普通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常见问题