【问题标题】:Exception occured when connecting java to oracle 10gjava连接oracle 10g时出现异常
【发布时间】:2015-10-06 19:52:23
【问题描述】:

我的代码如下。

java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
java.sql.Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "ims", "_ims");

异常发生在下面给出的第二行。

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
localhost:1521:xe"

异常是什么意思?我的代码有什么问题?

由 Girish 编辑

listener.ora 文件:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = Girish-PC)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

tnsnames.ora 文件:

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = Girish-PC)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

ORACLR_CONNECTION_DATA = 
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) 
    ) 
    (CONNECT_DATA = 
      (SID = CLRExtProc) 
      (PRESENTATION = RO) 
    ) 
  ) 

上面给出了 tnsnames.ora 和 listener.ora 文件的内容。

【问题讨论】:

  • listener.ora 文件,在oracle\admin\network 下可用。如果可用,请检查 portservice
  • 是的,两个文件都可用,该文件中的条目也可用。
  • 查看我的更新编辑。
  • @Girish 尝试使用您的系统 IP 代替 localhost

标签: java oracle jdbc


【解决方案1】:

我已将我的 oracle**.jar 替换为新的,它可以正常工作。我认为我的旧 oracle**.jar 有问题。感谢大家的支持。

【讨论】:

    【解决方案2】:

    表示给定的 sid(xe) 不可用。

    Listener 无法识别或在 listener.ora 或 tnsnames.ora 文件中找到它。请检查文件并验证 xe sid 的条目是否存在。

    如果上述文件中存在条目,则检查侦听器是否正在运行。

    ** 更新**

    使用下面的jdbc url

    jdbc:oracle:thin:@myserver:1521/XE

    【讨论】:

    • 两个(如你所说).ora 文件都可用,oracle 的服务也在运行。
    • xe sid 的条目出现在这些文件中吗?你能把内容贴在这里吗...
    • 两个文件中都有条目。
    • 例外:java.sql.SQLException: Io exception: The Network Adapter could not establish the connection
    【解决方案3】:

    你正在使用类似的刺痛

    jdbc:oracle:thin:@myserver:1521:XE
    

    试试看

    jdbc:oracle:thin:@myserver:1521/XE
    

    因为我已经面临同样的问题。有了这个我解决了。

    确保OracleServiceXEOracleXETNSListener 正在运行。

    Still facing issue

    【讨论】:

    • 我按照你的建议做了,但是出现了以下异常:java.sql.SQLException: Io exception: The Network Adapter could not establish the connection
    • 所以检查用户名和密码是否输入正确。也可以网络设置。确保OracleServiceXEOracleXETNSListener 正在运行。
    • OracleServiceXE 和 OracleXETNSListener 也在运行。
    • 我已经根据您更新的答案和评论进行了测试。但不工作。现在我问愚蠢的问题,我的 oracle 10g 设置有什么问题吗?
    • 谁知道这一点。因为它已安装在您的系统中。
    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多