[英]How to connect Java with oracle 8i database on local network
我想使用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
您可能需要以下详细信息:
这是我的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)
我在互联网上寻找解决方案,但没有任何帮助
这些是我的测试和结果:
我已经测试过使用错误的名称更改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
我已经与管理员核对了侦听器状态,并且该状态正在运行(系统正在运行)
我已禁用防火墙
更新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)
)
)
我在虚拟基础架构上安装了一个测试站点。
使用不同版本的jdbc驱动程序进行测试:
使用不同的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";
从Oracle客户端9.2.0.1测试连接到DB 8.1.7.0 SID = ORCL
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网络配置文件: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)
)
)
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();
}
}
}
这是您的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(); } } }
}
测试连接成功!!!
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
在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
将瘦驱动程序更改为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
在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
我继续使用不同版本的jdbc驱动程序进行测试。 http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
版本9.2.0.1、8.1.7.0、10.2.0.5已成功通过测试。 版本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.