使用 ojdbc6 驱动程序通过 jdbc 连接到 Oracle 8i 数据库时出错

Error when connecting via jdbc to Oracle 8i database using ojdbc6 driver

我想使用 ojdbc6 驱动程序通过 jdbc 连接到 Oracle 数据库。

我在虚拟机中有 Oracle 10g,在工作中有 Oracle 8i。我正在尝试创建一个 java 应用程序,它允许我连接到数据库并执行一些 SQL 语句。

使用 Oracle 10g 一切都很好但是 使用 oracle 8i (8.1.7) 我得到这个 error

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:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at jdbcon.actionPerformed(jdbcon.java:235)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6297)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3275)
at java.awt.Component.processEvent(Component.java:6062)
at java.awt.Container.processEvent(Container.java:2039)
at java.awt.Component.dispatchEventImpl(Component.java:4660)
at java.awt.Container.dispatchEventImpl(Container.java:2097)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4236)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166)
at java.awt.Container.dispatchEventImpl(Container.java:2083)
at java.awt.Window.dispatchEventImpl(Window.java:2489)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:668)
at java.awt.EventQueue.access0(EventQueue.java:81)
at java.awt.EventQueue.run(EventQueue.java:627)
at java.awt.EventQueue.run(EventQueue.java:625)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue.run(EventQueue.java:641)
at java.awt.EventQueue.run(EventQueue.java:639)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:638)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

堆栈跟踪的这一行(jdbcon 是我的 class 名字)

at jdbcon.actionPerformed(jdbcon.java:235)

带我到这行代码

con=DriverManager.getConnection("jdbc:oracle:thin:@"+adresse+":"+port+":"+bd,user,pass);

源码

    try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
             con=DriverManager.getConnection("jdbc:oracle:thin:@"+adresse+":"+port+":"+bd,user,pass);
                if(con.isValid(10))
                    //System.out.println("Connexion réussie");
                    JOptionPane.showMessageDialog(null, "Connexion réussie");

当我使用错误的 SID 时,它会给我这个错误:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

这意味着主机,端口没问题。当我使用 正确的 SID 时,我得到了之前的错误。

这个问题只存在于 oracle 8i

ojdbc6ojdbc5 驱动程序不支持 Oracle 版本 8(这些驱动程序适用于更高版本的 oracle),要连接您需要:

classes12.zip 可以从 Oracle8i JDBC Drivers

下载的驱动程序

您显然需要 oracle8i 的 jdbc 驱动程序,因为 oracle10g 和 oracle8i 不使用相同的驱动程序