指定的 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 无效错误