我正在尝试一个程序来检查与下面的 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或创建数据库时创建的。
确保您的 SID
为 xe
并配置为要使用的监听器。
另请检查 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/