我已经在我的windows 7 64位操作系统中安装了Oracle 11g Express Edition Release 2,并试图执行JDBC程序,然后我得到了以下错误:

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
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.java:28)
    at Lab3O.main(Lab3O.java:15)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
    ... 8 more

当前回答

我只是通过在服务中重新启动oracleService来修复它

其他回答

我也得到了同样的错误,但当他们尝试所有三个失败。 如果以上三点都失败了。尝试LSNRCTL状态,如果您发现服务(在我的情况下是XE)丢失尝试这个

sqlplus /nolog
conn  system
alter system register;  
exit  
lsnrctl status  

现在您可以看到服务 即使没看到也试试这个

sqlplus /nolog  
conn system  
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;  
alter system register;  
exit  
lsnrctl status

这应该可以工作…

通过在主机上执行tnsping和实例名来检查。它会给你tns描述,大多数时候主机名是不同的,不匹配。

我同样解决我的问题

在Unix机器中 $ tnspring(输入)

它给了我完整的tns描述,我发现主机名是不同的..:)

当你浏览start->run->services.msc时,请检查OracleServiceXE和OracleXETNSListener的状态是否已启动。

对于我的情况下,只有OracleXETNSListener启动,但OracleServiceXE没有启动,当我开始右键单击->启动并检查连接它为我工作

我只是通过在服务中重新启动oracleService来修复它

我通过纠正JDBC代码解决了这个问题。

正确的JDBC字符串应该是…

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","ishantyagi");

但是我使用的JDBC字符串是…

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");

因此,指定orcl而不是xe的错误显示了这个错误,因为SID名称是错误的。