【问题标题】:Invalid Oracle URL specified: OracleDataSource.makeURL指定的 Oracle URL 无效:OracleDataSource.makeURL
【发布时间】:2009-08-26 07:14:34
【问题描述】:

我正在尝试连接到本地 oracle 数据库,但收到以下神秘错误消息: Invalid Oracle URL specified: OracleDataSource.makeURL

我很确定这是由于我传递的数据库连接参数有错误,但实际上,此错误消息对我没有任何帮助。任何关于我做错了什么的提示将不胜感激。

仅供参考:用于连接的代码如下,除了硬编码的字符串之外,这是在我们的生产环境中使用的并且在那里工作的代码。

OracleDataSource dataSource = new OracleDataSource();
 dataSource.setServerName("localhost");
 dataSource.setUser(userName);
 dataSource.setPassword(password);
 dataSource.setDatabaseName("orcl");
return dataSource.getConnection();

【问题讨论】:

  • 刚刚将神秘的错误消息交给了 Google - 您是否已经检查过这些搜索结果?其中一些听起来很有希望。
  • 检查了这些,但没有一个解释为什么或何时给出此错误消息。这只是说明为什么编写错误消息很困难,这个通用消息只是告诉我“你做错了”,是的,我现在明白了,现在让我修复它。

标签: java oracle


【解决方案1】:

如果你使用 setUrl(或者如果你的容器像 glassfish 这样做)

确保使用正确的语法

==== 注意@前面的冒号 ====

jdbc:oracle:thin:@localhost:1521:sid

jdbc:oracle:thin:@localhost:1521/servicename

如果语法有问题,数据源类会尝试解析它并给出神秘错误

【讨论】:

  • 服务名称语法应该使用正斜杠,否则你会得到一个 java.sql.SQLRecoverableException (java.sql.SQLRecoverableException: IO Error: Invalid number format for port number) jdbc:oracle:thin: @localhost:1521/服务名
  • 我必须使用 TNS 名称而不是 sid,就像在 jdbc:oracle:thin@localhost:1521:tnsname 中一样,然后我设置了用户和密码工作
  • 对我来说最困难的部分是看到“@”之前没有“:”。我一定看了30分钟。 :(
  • 你太棒了。被忽视的部分。这个答案清楚地解决了我的问题。谢谢!
  • 非常感谢@Kalpesh Soni。 “/”而不是“:”的这个小“细节”产生了很大的不同,因为我使用的是 PDB 并且 servicename 是规则而不是 SID。真的非常感谢!!!
【解决方案2】:

令人惊讶的是,在创建连接的代码中添加以下两行后,它就起作用了。

dataSource.setPortNumber(1521);
dataSource.setDriverType("thin");

我不明白为什么我们以前没有这个问题,但这可能与我的本地安装有关。我最大的不满是错误消息没有提供任何关于错误的细节。

【讨论】:

    【解决方案3】:

    适用于 WildFly 用户(当前为 v14.0.1.Final)。

    您需要为DataSource添加additional parameters

    数据源 -> 连接 -> 连接属性

    driverType=thin(按 Enter 键完成)。

    还要仔细检查您使用了正确类型的数据源。在我的情况下,问题是通过创建 XA 数据源并将 URL 传递给参数来解决的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 2023-01-25
      • 1970-01-01
      相关资源
      最近更新 更多