java - 使用jdbc连接oracle数据库

标签 java oracle jdbc

我正在尝试一个程序来检查与下面的 oracle 数据库的连接

import java.sql.*;  
class OracleCon{  
public static void main(String args[]){  
    try{  
        //step1 load the driver class  
        Class.forName("oracle.jdbc.driver.OracleDriver");  

        //step2 create  the connection object  
        Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","SangamOne123");  

        //step3 create the statement object  
        Statement stmt=con.createStatement();  

        //step4 execute query  
        ResultSet rs=stmt.executeQuery("select * from emp");  
        while(rs.next())  {
            System.out.println(rs.getInt(1)+"  "+rs.getString(2)+"  "+rs.getString(3));  
        }

         //step5 close the connection object  
         con.close();  

        } catch(Exception e){
            System.out.println(e);
        }
    }  
}  

但是在 eclipse 中运行它后,它显示以下异常。

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

请帮助我,我是 Oracle 数据库新手。

最佳答案

问题与oracle的SID(系统标识符)有关,SID是在安装oracle或创建数据库时创建的。

确保您的 SIDxe 并配置为要使用的监听器。

另请检查 Oracle 安装中的 listener.ora 文件。它应该类似于以下内容:

 SID_LIST_LISTENER =
    (SID_LIST =
        (SID_DESC =
          (SID_NAME = default)
          (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1)
          (PROGRAM = extproc)
          (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
        )

       (SID_DESC =
         (GLOBAL_DBNAME = ORCL)
         (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1)
         (SID_NAME = orcl)
        )

       (SID_DESC =
         (GLOBAL_DBNAME = BMBK)
         (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1)
         (SID_NAME = BMBK)
        )

     )

    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 123.456.789.101)(PORT = 1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        )
      )

请注意第三行,其中 SID_NAME = default,对于您的监听器,SID 应为 xe 或使用此处指定的任何内容。

您的系统中可能还有多个 SID。

关于java - 使用jdbc连接oracle数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25886523/

相关文章:

java - 如何在 Apache Commons Configuration 中使用 XPath 按值查询 XMLConfiguration?

java - jdbc - 一个查询中的多个选择语句

java - JDBC 测试套件

java - 一个类必须遵守一个接口(interface)的文档约定才能说实现该接口(interface)

java - Android Studio 启动需要很长时间

oracle - Grails域:找不到ID获取

oracle - Oracle 中 ORDER BY 的 ORA-00904

java - 同步了一个从 jdbc 调用的 oracle 包

java - 如何在 JRuby 中初始化 SQLite3 JDBC 驱动程序?

c# - C# 中是否有类似 Java 的 throws 关键字?