指定的 Oracle URL 无效:OracleDataSource.makeURL

Posted

技术标签:

【中文标题】指定的 Oracle URL 无效:OracleDataSource.makeURL【英文标题】:Invalid Oracle URL specified: 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 - 您是否已经检查过这些搜索结果?其中一些听起来很有希望。 检查了这些,但没有一个解释为什么或何时给出此错误消息。这只是说明为什么编写错误消息很困难,这个通用消息只是告诉我“你做错了”,是的,我现在明白了,现在让我修复它。 【参考方案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 传递给参数来解决的。

【讨论】:

以上是关于指定的 Oracle URL 无效:OracleDataSource.makeURL的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException:指定的 Oracle URL 无效错误

Oracle 错误:ORA-01839:指定月份的日期无效

oracle 9i:ora-12705 指定的 nls 参数值无效或未知

重新编译PLSQL中无效对象或指定对象

AWS API-Gateway:指定的缓存键参数无效

oracle安装INS 32010 基目录位置包含无效字符