简体   繁体   English

如何在本地网络上将Java与oracle 8i数据库连接

[英]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 : 您可能需要以下详细信息:

  • Oracle 8i Database port 1521 Oracle 8i数据库端口1521
  • Local Network Server Running on Windows Server 2003 ip 10.3.1.1 在Windows Server 2003 ip 10.3.1.1上运行的本地网络服务器
  • java version "1.8.0_152" on machine on IP 10.3.1.2 IP 10.3.1.2上的机器上的Java版本“ 1.8.0_152”
  • added classes12.zip file to build path 添加了classes12.zip文件以构建路径

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: 这些是我的测试和结果:

  • Testing with wrong database name(SID) 使用错误的数据库名称(SID)测试

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
  • Checking The database Listener 检查数据库监听器

I've checked with the administrator the listener status and it is running (the system is running) 我已经与管理员核对了侦听器状态,并且该状态正在运行(系统正在运行)

数据库监听器

  • Disable Firewall 禁用防火墙

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. 我在虚拟基础架构上安装了一个测试站点。

  • Server: Windows 2003 SP2 32 bit 服务器:Windows 2003 SP2 32位
  • Server: Oracle 8.1.7.0 伺服器:Oracle 8.1.7.0
  • Client: windows 7 32 bit 客户端:Windows 7 32位
  • Client: java 1.8.0_73 客户端:java 1.8.0_73
  • Client: Oracle client 9.2.0.1 客户端:Oracle客户端9.2.0.1
  • Client: classes12.jar from Oracle client 9.2.0.1 in C:\\oracle\\ora92\\jdbc\\lib 客户端:来自C:\\ oracle \\ ora92 \\ jdbc \\ lib中的Oracle客户端9.2.0.1的classes12.jar

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM