2

我正在尝试使用以下 url 将 oracle 与 jdbc 连接

String url = "jdbc:oracle:thin:@<host>:1522:dev;includeSynonyms=true";

但它抛出以下错误。

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
<host>:1522:dev;includeSynonyms=true

如果我从 url 中删除属性(includeSynonyms=true),我可以连接。

我在用ojdbc14.jar

请帮我

4

3 回答 3

3

您不能(AFAIK)将此设置为 URL 的一部分。根据OracleDriver 文档

指定数据库 URL 和属性对象

以下签名接受一个 URL,以及一个指定用户名和密码(可能还有其他内容)的属性对象:

getConnection(String URL, Properties info);

URL 的格式为:

jdbc:oracle:<drivertype>:@<database>

除了 URL 之外,使用标准 Java Properties 类的对象作为输入。例如:

java.util.Properties info = new java.util.Properties();
info.put ("user", "scott");
info.put ("password","tiger");
info.put ("defaultRowPrefetch","15");
getConnection ("jdbc:oracle:oci8:@",info);

列出 Oracle JDBC 驱动程序支持的连接属性的表包括includeSynonyms,因此您应该能够:

String url = "jdbc:oracle:thin:@//<HOST>:1522/dev"
java.util.Properties info = new java.util.Properties();
info.put ("includeSynonyms", "true");
getConnection (url, info);

恐怕未经测试,我不确定它是否适用于您的驱动程序版本。您还可以稍后通过 OracleConnectionOracleConnectionWrapper进行设置。

也不完全确定 URL 表单是否适用于 1.4 驱动程序,尽管我认为它可以 - 您可能需要使用原始@<host>:1522:dev表单。请注意,在easy connect格式中,dev指的是服务名称而不是SID,它们可能不一样;检查lsnrctl status这是否有问题。

于 2013-01-22T11:01:15.227 回答
0

您是否使用url变量中的 URL 而不更改<host>为 IP 地址?如果是这样,那么只需将其更改为 Oracle 服务器的地址。

您还应该阅读有关通过 JDBC 连接 tp Oracle 的信息:http ://docs.oracle.com/cd/B10501_01/java.920/a96654/basic.htm甚至还有关于设置连接属性的信息,包括includeSynonyms.

于 2013-01-22T11:06:37.793 回答
-1

您需要在符号之后添加一个 TNS 名称,@即如果 oracle db tns 名称是 dev,它将转换为:

String url = "jdbc:oracle:thin:@//<HOST_IP>:1522:dev;includeSynonyms=true";

使用正斜杠而不是完整的冒号

于 2013-01-22T09:50:00.003 回答