问题描述
嗨AskTom团队。
我在java应用程序中测试到数据库的jdbc连接。当我使用以下表单时:
一切都很好,我的Java应用程序连接到数据库。
当我尝试使用此表单时
我得到: ORA-12514, TNS:侦听器当前不知道连接描述符中请求的服务
不过,如果我稍微更改一下,然后添加.world域
一切又好起来了。所以我的问题是:这个双正斜线是干什么的?为什么在连接到//myhost时没有使用默认域(.world) ?如果我去掉斜杠,为什么还要用它?
谢谢!
马辛
我在java应用程序中测试到数据库的jdbc连接。当我使用以下表单时:
jdbc:oracle:thin:@myhost:1521/myservicename
一切都很好,我的Java应用程序连接到数据库。
当我尝试使用此表单时
jdbc:oracle:thin:@//myhost:1521/myservicename
我得到: ORA-12514, TNS:侦听器当前不知道连接描述符中请求的服务
不过,如果我稍微更改一下,然后添加.world域
jdbc:oracle:thin:@//myhost:1521/myservicename.world
一切又好起来了。所以我的问题是:这个双正斜线是干什么的?为什么在连接到//myhost时没有使用默认域(.world) ?如果我去掉斜杠,为什么还要用它?
谢谢!
马辛
专家解答
真有趣-我不知道
jdbc:oracle:thin:@myhost:1521/myservicename
甚至是有效的语法。我可以给你我的假设,但我不能保证它的准确性。
我相信你知道,你可以用tns条目连接
@my_tns_name
但那只是一个真实描述的简称,即,没有什么可以阻止你去做(例如) :
连接用户/pass@" ( DE描摹=(地址=(PROTOCO=tcp ) (HOST=销售-服务器) (端口=1521)) (连接_DATA=(SER_NAME=销售.us.acme.com ) ))"
在这些情况下,我们仍在使用标准的连接机制,因此我们将考虑sqlnet.ora中的条目(如默认域)等。
所以我的假设是:
@myhost:1521/myservicename
是否有足够的信息使用标准连接车辆进行连接(因此,我们仍然在sqlnet.ora等中查找默认域).
相反地, '//'语法被称为“ez连接”,是专门为没有tnsnames等的时候设计的。因此,整个连接信息都是从该行中收集到的。因此,服务名必须是完全限定的,因为我们不会访问sqlnet.ora (它可能甚至不存在)来查找默认域等。
希望这个能帮上忙。
jdbc:oracle:thin:@myhost:1521/myservicename
甚至是有效的语法。我可以给你我的假设,但我不能保证它的准确性。
我相信你知道,你可以用tns条目连接
@my_tns_name
但那只是一个真实描述的简称,即,没有什么可以阻止你去做(例如) :
连接用户/pass@" ( DE描摹=(地址=(PROTOCO=tcp ) (HOST=销售-服务器) (端口=1521)) (连接_DATA=(SER_NAME=销售.us.acme.com ) ))"
在这些情况下,我们仍在使用标准的连接机制,因此我们将考虑sqlnet.ora中的条目(如默认域)等。
所以我的假设是:
@myhost:1521/myservicename
是否有足够的信息使用标准连接车辆进行连接(因此,我们仍然在sqlnet.ora等中查找默认域).
相反地, '//'语法被称为“ez连接”,是专门为没有tnsnames等的时候设计的。因此,整个连接信息都是从该行中收集到的。因此,服务名必须是完全限定的,因为我们不会访问sqlnet.ora (它可能甚至不存在)来查找默认域等。
希望这个能帮上忙。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




