[英]How to connect Java with oracle 8i database on local network
I want to connect to Oracle 8i Database with java, where the database is on server on local network 10.3.1.1 at port 我想使用Java连接到Oracle 8i数据库,其中该数据库位于端口10.3.1.1的本地网络上的服务器上
I have followed the example tutorial to make the connection from Oracle website 我按照示例教程进行了从Oracle网站的连接
https://docs.oracle.com/html/A67296_01/im_examp.htm#997347 https://docs.oracle.com/html/A67296_01/im_examp.htm#997347
also I followed the instruction that specified here https://people.cs.pitt.edu/~chang/156/06oracle/jdbc.html 我也遵循这里指定的指令https://people.cs.pitt.edu/~chang/156/06oracle/jdbc.html
You may need these details : 您可能需要以下详细信息:
This my Java Code: 这是我的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();
}
}
}
}
I get this error message: 我收到此错误消息:
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)
I have looked on internet for solutions but nothing is working with me 我在互联网上寻找解决方案,但没有任何帮助
These are my testing and results: 这些是我的测试和结果:
I have tested changing the dabase name (sid) with wrong name to check if its connected or not and thankfully it seems the connection to oracle almost correct because it response this error 我已经测试过使用错误的名称更改dabase名称(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
I've checked with the administrator the listener status and it is running (the system is running) 我已经与管理员核对了侦听器状态,并且该状态正在运行(系统正在运行)
I have Disabled Firewall 我已禁用防火墙
Update 1: Adding listener.ora content 更新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)
)
)
I installed a test site on a virtual infrastructure. 我在虚拟基础架构上安装了一个测试站点。
Tests with different versions of jdbc drivers: 使用不同版本的jdbc驱动程序进行测试:
Tests with different connectString: 使用不同的connectString进行测试:
connectString ="jdbc:oracle:thin:@10.89.251.123:1521:ORCL";
connectString ="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.89.251.123)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))";
connectString = "jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.89.251.123)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))";
connectString = "jdbc:oracle:oci:@ORCL8";
Test connect to DB 8.1.7.0 SID=ORCL from Oracle Client 9.2.0.1 从Oracle客户端9.2.0.1测试连接到DB 8.1.7.0 SID = ORCL
C:\\oracle\\ora92\\network>sqlplus scott@orcl8 C:\\ oracle \\ ora92 \\ network> sqlplus scott @ orcl8
SQL*Plus: Release 9.2.0.1.0 - Production on Tue Dec 26 13:44:11 2017
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Enter password:
Connected to:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
connected> select * from v$version;
----------------------------------------------------------------
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
PL/SQL Release 8.1.7.0.0 - Production
CORE 8.1.7.0.0 Production
TNS for 32-bit Windows: Version 8.1.7.0.0 - Production
NLSRTL Version 3.4.1.0.0 - Production
Elapsed: 00:00:00.00
connected>
Listener.ora Listener.ora
LISTENER.ORA Network Configuration File: C:\\oracle\\ora81\\network\\admin\\listener.ora Generated by Oracle configuration tools. LISTENER.ORA网络配置文件:C:\\ oracle \\ ora81 \\ network \\ admin \\ listener.ora由Oracle配置工具生成。### TNSNAMES.ORA Network Configuration File:
### Generated by Oracle configuration tools.
ORCL8 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.89.251.123)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)
TNSNAMES.ORA file from Oracle Client 9.2 Oracle Client 9.2中的TNSNAMES.ORA文件
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.89.251.123:1521:ORCL";
System.out.println("Before DriverManager.getConnection");
try {
connection = DriverManager.getConnection(connectString, "scott", "tiger");
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();
}
}
}
This your Java Code: (thin jdbc->oracle server) 这是您的Java代码:(瘦jdbc-> oracle服务器)
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.89.251.123:1521:ORCL"; System.out.println("Before DriverManager.getConnection"); try { connection = DriverManager.getConnection(connectString, "scott", "tiger"); 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(); } } }
} }
Test connection is Successfully !!! 测试连接成功!!!
26-DEC-2017 14:03:53 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.88.164.45)(PORT=54225)) * establish * ORCL * 0
Logging connections in the file listener.log file on Oracle Server c:\\oracle\\ora81\\network\\log\\listener.log 在Oracle Server c:\\ oracle \\ ora81 \\ network \\ log \\ listener.log的文件listener.log文件中记录连接
public void connect() throws Exception {
String connectString;
Class.forName("oracle.jdbc.driver.OracleDriver");
connectString = "jdbc:oracle:oci:@ORCL8";
System.out.println("Before DriverManager.getConnection");
try {
connection = DriverManager.getConnection(connectString, "scott", "tiger");
System.out.println("Connection established");
connection.setAutoCommit(false);
} catch (Exception e) {
// TODO: handle exception
System.out.println("Exception inside connect(): " + e);
e.printStackTrace();
}
}
C:\Program Files\Java\jdk1.8.0_73\bin>java -classpath . DBConnect
beginning
Before DriverManager.getConnection
Connection established
after Connected
after close
Change thin driver to oci (jdbc->oracle client library->oracle server) 将瘦驱动程序更改为oci(jdbc-> oracle客户端库-> oracle服务器)
26-DEC-2017 14:14:11 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=C:\Program Files\Java\jdk1.8.0_73\bin\java.EXE)(HOST=IVC-PTK-DEMIN)(USER=DeminDV))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.88.164.45)(PORT=54424)) * establish * ORCL * 0
Logging connections in the file Listener.log file on Oracle Server c:\\oracle\\ora81\\network\\log\\listener.log 在Oracle Server c:\\ oracle \\ ora81 \\ network \\ log \\ listener.log的文件Listener.log文件中记录连接
26-DEC-2017 14:14:11 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=C:\\Program Files\\Java\\jdk1.8.0_73\\bin\\java.EXE)(HOST=IVC-PTK-DEMIN)(USER=DeminDV))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.88.164.45)(PORT=54424)) * establish * ORCL * 0
I continued the tests with different versions of jdbc drivers. 我继续使用不同版本的jdbc驱动程序进行测试。 http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
Version 9.2.0.1, 8.1.7.0, 10.2.0.5 has successfully passed the test. 版本9.2.0.1、8.1.7.0、10.2.0.5已成功通过测试。 Versions 11.1.0.5, 11.2.0.4,12.1.0.2, 12.2.0.1 did not pass the test. 版本11.1.0.5、11.2.0.4、12.1.0.2、12.2.0.1未通过测试。
**http://download.oracle.com/otn/utilities_drivers/jdbc/10205/classes12.jar classes12.jar (1,621,582 bytes) - for use with JDK 1.2 and JDK 1.3** C:\\Program Files\\Java\\jdk1.8.0_73\\bin>java -classpath . DBConnect beginning Before DriverManager.getConnection Connection established after Connected after close http://download.oracle.com/otn/utilities_drivers/jdbc/10205/ojdbc14.jar ojdbc14.jar (1,569,316 bytes) - classes for use with JDK 1.4 and 1.5 C:\\Program Files\\Java\\jdk1.8.0_73\\bin>java -classpath . DBConnect beginning Before DriverManager.getConnection Connection established after Connected after close http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html **http://download.oracle.com/otn/utilities_drivers/jdbc/111070/ojdbc6.jar ojdbc6.jar (1,988,051 bytes) - Classes for use with JDK 1.6. It contains the JDBC** C:\\Program Files\\Java\\jdk1.8.0_73\\bin>java -classpath . DBConnect beginning Before DriverManager.getConnection Exception inside connect(): java.lang.ArrayIndexOutOfBoundsException: 7 java.lang.ArrayIndexOutOfBoundsException: 7 at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1611) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:496) at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at DBConnect.connect(DBConnect.java:20) at DBConnect.main(DBConnect.java:38) after Connected Exception : java.lang.NullPointerException Close Connection Exception : java.lang.NullPointerException java.lang.NullPointerException at DBConnect.main(DBConnect.java:49) **http://download.oracle.com/otn/utilities_drivers/jdbc/11204/ojdbc6.jar ojdbc6.jar (2,739,670 bytes) - (SHA1 Checksum: a483a046eee2f404d864a6ff5b09dc0e1be3fe6c) Certified with JDK 8, JDK 7 and JDK 6: It contains the JDBC driver** C:\\Program Files\\Java\\jdk1.8.0_73\\bin>java -classpath . DBConnect beginning Before DriverManager.getConnection Exception inside connect(): java.lang.ArrayIndexOutOfBoundsException: 4 java.lang.ArrayIndexOutOfBoundsException: 4 at oracle.jdbc.driver.T4C8TTIdty.<init>(T4C8TTIdty.java:488) at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1199) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:340) at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553) at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at DBConnect.connect(DBConnect.java:20) at DBConnect.main(DBConnect.java:38) after Connected Exception : java.lang.NullPointerException Close Connection Exception : java.lang.NullPointerException java.lang.NullPointerException at DBConnect.main(DBConnect.java:49) **http://download.oracle.com/otn/utilities_drivers/jdbc/121020/ojdbc7.jar ojdbc7.jar (3,397,734 bytes) - (SHA1 Checksum: a2348e4944956fac05235f7cd5d30bf872afb157) Certified with JDK 7 and JDK 8; It contains the JDBC driver** C:\\Program Files\\Java\\jdk1.8.0_73\\bin>java -classpath . DBConnect beginning Before DriverManager.getConnection Exception inside connect(): java.lang.ArrayIndexOutOfBoundsException: 7 java.lang.ArrayIndexOutOfBoundsException: 7 at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1611) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:496) at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at DBConnect.connect(DBConnect.java:20) at DBConnect.main(DBConnect.java:38) after Connected Exception : java.lang.NullPointerException Close Connection Exception : java.lang.NullPointerException java.lang.NullPointerException at DBConnect.main(DBConnect.java:49) **http://download.oracle.com/otn/utilities_drivers/jdbc/122010/ojdbc8.jar ojdbc8.jar (4,036,257 bytes) - (SHA1 Checksum: 60f439fd01536508df32658d0a416c49ac6f07fb) Certified with JDK 8; It contains the JDBC driver** C:\\Program Files\\Java\\jdk1.8.0_73\\bin>java -classpath . DBConnect beginning Before DriverManager.getConnection Exception inside connect(): java.lang.ArrayIndexOutOfBoundsException: 7 java.lang.ArrayIndexOutOfBoundsException: 7 at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1548) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:518) at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:688) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:39) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:691) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at DBConnect.connect(DBConnect.java:20) at DBConnect.main(DBConnect.java:38) after Connected Exception : java.lang.NullPointerException Close Connection Exception : java.lang.NullPointerException java.lang.NullPointerException at DBConnect.main(DBConnect.java:49)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.