4

我已经下载了 oracle express 11g 版本并安装了它。现在我想从 java 应用程序连接它。这是我的连接代码:-

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:example", "example","password123");

但是当我尝试连接它时,它显示我出现以下异常。

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:419)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at javaapplication3.JavaApplication3.main(JavaApplication3.java:40)

但是当我试图连接“xe”数据库时,它就被连接了。

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();   
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "example","password123");

我不知道为什么会这样?请给我一些参考或提示。

4

4 回答 4

8

我认为,您在database schema和数据库类型之间存在误解。中OracleXE表示Express Editionoracle数据库。ORCL意味着Oracle Corp

在mysql中

DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "example","password123");

`test` is a database schema.

在 Oracle XE 中

DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "example","password123");
DriverManager.getConnection("jdbc:oracle:thin:scott/tiger@myhost:1521:orcl","example", "password123");

`example`: database schema name and DB user name are the same.
于 2012-11-01T11:31:03.917 回答
5

Oracle 的连接 URL 采用以下格式:

jdbc:oracle:thin:@HOST:PORT:SID

SID 是站点标识符。在完整的 oracle 安装中,您可以有多个 SID,但对于 Oracle Express,这将始终是XE.

您所说的“数据库”等同于 Oracle 中的“用户”(上面代码中的“示例”)。表等...是在该用户下创建的。

于 2012-11-01T11:30:25.823 回答
1

在 URL 模式中,XE 和 orcl 是 Oracle 的服务 ID。对于 Oracle 表达版,使用“xe”,对于 Oracle 企业版,使用“orcl”。

于 2013-12-29T10:38:59.897 回答
0

通过执行以下命令检查侦听器已知哪些实例:lsnrctl services

检查您的 tnsnames.ora

检查您的 SID 参数是否存在拼写错误和无效参数值

于 2012-11-01T11:28:52.687 回答