繁体   English   中英

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

[英]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

您可能需要以下详细信息:

  • 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)测试

我已经测试过使用错误的名称更改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)
    )
  )

我在虚拟基础架构上安装了一个测试站点。

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

使用不同版本的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.

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