java – 无法使用12c jar创建Eclipse数据源到Oracle 12c.不过11g的作品

当我打开数据源资源管理器窗口并尝试创建一个新的连接配置文件时,我选择“Oracle”,Oracle瘦驱动程序,然后我指向我的PC上的以下JAR文件
C:\oracle_12101_64bit\product\12101_64bit\CLIENT_1\jdbc\lib\ojdbc7.jar

提供连接参数后,它将使用以下格式导出连接网址

jdbc:oracle:thin:@host:PORT:SID

但是,我想要的是这个(注意冒号而不是正斜杠)

jdbc:oracle:thin:@host:PORT/SID

我似乎可以使用生成的URL连接到11g数据库,但是不是12c,我不知道这是巧合的还是我有不同的问题.

在我的程序中,我使用JPA,并从所需的正斜杠格式的配置文件中读取一个连接url,如果我更改url以使用冒号,该程序可以连接并且连接失败.

如果我不能控制派生的连接url来生成一个带斜杠而不是冒号的url,那么如何在Eclipse的数据源资源管理器视图中创建连接配置文件?我得到的错误是:

ORA-12505,TNS:listener does not currently kNow of SID given in connect descriptor

更新1

我注意到的一件事是,即使我关联了Oracle 12c附带的jdbc7.jar文件,驱动程序仍然显示为“Oracle 11.”.

更新2:

以下是我的tnsnames.ora文件中的一个示例:

AFDEDEV.MYCO.COM =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = servername.sys.MYCO.com)(PORT = 2))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = afdedev.MYCO.com)
    )
  )

看起来连接字符串构建器只需要一个SID.我的SID是什么,我该怎么知道?我试过AFDEDEV和AFDEDEV.MYCO.COM.在11g的情况下,我使用相当于AFDEDEV.对不起,我不太明白SIDs与SERVICE NAMES.有没有一个查询,我可以针对db来告诉我SID?

解决方法

这似乎是Eclipse“Oracle Thin Driver”模板的限制.只允许您为连接指定SID,而不是服务名称;并且您不知道SID或者它没有向监听器注册(您的DBA需要解决).

如果您从“Oracle Database 11g驱动程序”模板而不是“Oracle Thin Driver”模板创建新的驱动程序,并将其指向12c ojdbc7.jar文件,那么您将可以选择提供服务名称.然后,它将生成一个像jdbc:oracle:thin:@ // servername.sys.MYCO.com:2/afdedev.MYCO.com这样的URL.

它仍然是同样的瘦驱动程序,Eclipse似乎更好地了解它,

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...