لماذا أحصل على ArrayIndExoutofBoundSexception في اتصال JDBC الخاص بي؟

StackOverflow https://stackoverflow.com/questions/3583182

  •  01-10-2019
  •  | 
  •  

سؤال

أنا جديد على Java وأحاول استخدام JDBC للاتصال بقاعدة بيانات الكون. أنا أستخدم Sun Java 6 JDK لاستخدام NetBeans لبناء المشروع. الاختبار البسيط أدناه يبني ولكنه يعطي الأخطاء أدناه:

> run:
driver loaded
Exception in thread "main" java.lang.ExceptionInInitializerError
Connecting...
        at com.ibm.u2.jdbc.UniJDBCProtocolU2Impl.initDefaultMarks(UniJDBCProtocolU2Impl.java:1239)
        at com.ibm.u2.jdbc.UniJDBCProtocolU2Impl.<init>(UniJDBCProtocolU2Impl.java:116)
        at com.ibm.u2.jdbc.UniJDBCConnectionImpl.<init>(UniJDBCConnectionImpl.java:137)
        at com.ibm.u2.jdbc.UniJDBCDriver.connect(UniJDBCDriver.java:111)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
        at testjdbc.Main.main(Main.java:36)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 3
        at asjava.uniclientlibs.UniTokens.<clinit>(UniTokens.java:109)
        ... 7 more
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

رمز الاختبار الخاص بي:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package testjdbc;
import java.sql.*;
import java.io.*;

 /**
 *
* @author norm
 */
public class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    Connection con = null ;

    try{
        // generate URL

    String url = "jdbc:ibm-u2://my.uv.db:31438/DB-ACCOUNT;user=me;password=pass"; //testing, I remove user and password from here and use them below. Still FAILS!!! ARGGGG!!!
    String user = "me";
    String password = "pass";

    String driver = "com.ibm.u2.jdbc.UniJDBCDriver";
    //Load driver and connect to server
    Class.forName(driver);
    System.out.println("driver loaded");
    System.out.println("Connecting...");
    con = DriverManager.getConnection(url); //This is line 36
    // con = DriverManager.getConnection(url, user, password); // gives the same error
    //con = DriverManager.getConnection("jdbc:ibm-u2://my.uv.db:31438/D:/PathTo/DB;" ); //and yet the same error for this as well
    System.out.println("Connection String sent");
    System.out.println("Querying...");
    testQuery( con ) ;

    }
    catch ( SQLException e ) {
        System.out.println("Ex-Message :" + e.getMessage());
        System.out.println("Ex-Code    :" + e.getErrorCode()) ;
        System.out.println("Ex-SQLState:" + e.getSQLState());
        System.out.println("Ex-Next    :" + e.getNextException());
        e.printStackTrace() ;
        System.gc();
  } catch ( Exception e) {
        System.out.println("Exception caught:"+e) ;
        e.printStackTrace() ;
  }
}

public static void testQuery(Connection con)
    throws SQLException
{
    Statement stmt = con.createStatement();
    String sql = "select FIRST.NAME from EMPCEL";
            //"select @ID, CITY, STATE, ZIP, PHONE from CUSTOMER";

    // Execute the SELECT statement
    ResultSet rs = stmt.executeQuery(sql);

    // Get result of first five records
    System.out.println("\tlist selected columns for the first five records:");
    int i = 1;
    while (rs.next() && i < 6)
    {
        System.out.println("\nRecord "+ i +" :");
        System.out.println("\tFirst Name : \t" + rs.getString(1));
//            System.out.println("\tCITY :\t" + rs.getString(2));
//            System.out.println("\tSTATE :\t" + rs.getString(3));
//            System.out.println("\tZIP : \t" + rs.getString(4));
//            System.out.println("\tPHONE :\t" + rs.getString(5));
        i++;
        System.out.println("Finished.");
    }

    rs.close();
    stmt.close() ;
    System.out.println("\n\t*--- QUERY test is done successful ---*\n");
}

}
هل كانت مفيدة؟

المحلول

هذا يبدو أن NetBeans ذات الصلة. أنظر أيضا هذا الموضوع في منتدىهم. يبدو أنه يعمل في Eclipse (وربما جميع البيئات الأخرى).

من الواضح أن هذا خطأ في برنامج تشغيل الكون JDBC. يبدو أنه داخل المُعزد الثابت بالاعتماد على بعض الحالات البيئية المحددة ، وهو ما يختلف في NetBeans. إذا لم يكن هذا خطأ ، فسيكون ذلك قد ألقى استثناءًا أكثر تكفيسًا للذات ، وليس استثناءًا سخيفًا في وقت التشغيل.

سأبلغ هذا الخطأ إلى IBM/Universe.

نصائح أخرى

إذا كان الرمز المقدم هو الذي تسبب بالفعل في الاستثناء ، فأنا أظن أنه فشل بسبب url هو null في الوقت الذي تحاول الحصول على الاتصال.

لكن StackTrace الخطأ يعرض خطأ في السطر 36 وهو سطر التعليق. لذا ، إذا كان تخميني خاطئًا ، فيرجى تحرير سؤالك وتقديم رمز المطابقة ورسالة الخطأ ووضع علامة على سطر الكود الذي يلقي الاستثناء.


انت لست وحدك: نفس المشكلة

لقد واجهت هذه المشكلة أيضًا. تفترض Unitokens أن هناك تحويلًا واحدًا من البايت إلى chars ، لكنه ليس صحيحًا بالنسبة لجميع المنصات. تمرير حجة إلى JVM يتجنب هذه القضية. جرب -dfile.encoding = "Windows -1252" أو -dfile.encoding = "US -ASCII"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top