我想用 java 连接到 Oracle 8i 数据库,其中数据库位于本地网络 10.3.1.1 的服务器上的端口
我已按照示例教程从 Oracle 网站建立连接
https://docs.oracle.com/html/A67296_01/im_examp.htm#997347
我也按照这里指定的说明 https://people.cs.pitt.edu/~chang/156/06oracle/jdbc.html
您可能需要这些详细信息:
- Oracle 8i 数据库端口 1521
- 在 Windows Server 2003 ip 10.3.1.1 上运行的本地网络服务器
- IP 10.3.1.2 机器上的 java 版本“1.8.0_152”
- 添加了 classes12.zip 文件以构建路径
这是我的 Java 代码:
package com.oracle8i.testconnect;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBConnect {
public Connection connection;
public DBConnect() {
// TODO Auto-generated constructor stub
}
public void connect() throws Exception {
String connectString;
Class.forName("oracle.jdbc.driver.OracleDriver");
connectString = "jdbc:oracle:thin:@10.3.1.1:1521:dbname";
System.out.println("Before DriverManager.getConnection");
try {
connection = DriverManager.getConnection(connectString, "username", "password");
System.out.println("Connection established");
connection.setAutoCommit(false);
} catch (Exception e) {
// TODO: handle exception
System.out.println("Exception inside connect(): " + e);
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
DBConnect client = new DBConnect();
System.out.println("beginning");
try {
client.connect();
System.out.println("after Connected");
client.connection.close();
System.out.println("after close");
} catch (Exception e) {
// TODO: handle exception
try {
System.out.println("Exception : " + e);
client.connection.close();
e.printStackTrace();
} catch (Exception ex) {
// TODO: handle exception
System.out.println("Close Connection Exception : " + ex);
ex.printStackTrace();
}
}
}
}
我收到此错误消息:
beginning
Before DriverManager.getConnection
Exception inside connect(): java.lang.ArrayIndexOutOfBoundsException: 4
java.lang.ArrayIndexOutOfBoundsException: 4
at oracle.jdbc.driver.T4C8TTIdty.<init>(T4C8TTIdty.java:491)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1434)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:711)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:558)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.oracle8i.testconnect.DBConnect.connect(DBConnect.java:19)
at com.oracle8i.testconnect.DBConnect.main(DBConnect.java:37)
after Connected
Exception : java.lang.NullPointerException
Close Connection Exception : java.lang.NullPointerException
java.lang.NullPointerException
at com.oracle8i.testconnect.DBConnect.main(DBConnect.java:48)
我在互联网上寻找解决方案,但没有什么对我有用
这些是我的测试和结果:
- 使用错误的数据库名称(SID)进行测试
我已经测试用错误的名称更改数据库名称(sid)以检查它是否连接,幸运的是,它似乎与 oracle 的连接几乎正确,因为它响应了这个错误
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:673)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:711)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:558)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.oracle8i.testconnect.DBConnect.connect(DBConnect.java:19)
at com.oracle8i.testconnect.DBConnect.main(DBConnect.java:37)
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.NSProtocolStream.negotiateConnection(NSProtocolStream.java:272)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:263)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
... 8 more
- 检查数据库监听器
我已经向管理员检查了监听器状态并且它正在运行(系统正在运行)
- 禁用防火墙
我已禁用防火墙
更新 1:添加 listener.ora 内容
# LISTENER.ORA Network Configuration File: D:\ORACLE\ORA8I\network\admin\listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = svrstn01)(PORT = 1521))
)
)
(DESCRIPTION =
(PROTOCOL_STACK =
(PRESENTATION = GIOP)
(SESSION = RAW)
)
(ADDRESS = (PROTOCOL = TCP)(HOST = svrstn01)(PORT = 2481))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\ORACLE\ORA8I)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = SITEEN)
(ORACLE_HOME = D:\ORACLE\ORA8I)
(SID_NAME = SITEEN)
)
)