2010-08-27 107 views
1

我是Java新手,我嘗試使用JDBC連接到UniVerse數據庫。我正在使用Sun Java 6 JDK來使用NetBeans來構建項目。下面我簡單的測試構建但是它給了以下錯誤:爲什麼我在我的JDBC連接中得到一個ArrayIndexOutOfBoundsException?

> 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"); 
} 

} 
+0

你可以看到,我嘗試了DriverManager.getConnection幾種不同的方式,包括一些沒有體現在這個迭代。 – Norm 2010-08-27 10:14:50

回答

2

這似乎是Netbeans的關係。在他們的論壇中也可以看到this topic。它似乎在Eclipse(可能還有其他所有環境)中都有效。

這顯然是UniVerse JDBC驅動程序中的一個錯誤。它顯然是在靜態初始化器內依賴於一些特定的環境條件,這在Netbeans中是不同的。如果它不是一個bug,它會拋出一個更自我解釋的異常,而不是這樣一個愚蠢的運行時異常。

我將這個錯誤報告給IBM/UniVerse。

+1

聖潔CRAP !!!就是這樣。想想我昨天整天在桌子上撞着我的頭。我很想和Rocket通電話。謝謝BalusC !!並感謝您的Stackoverflow。 我想這解決了我將使用哪個IDE的爭論。 – Norm 2010-08-27 12:39:22

+0

不客氣。 – BalusC 2010-08-27 12:41:23

1

如果目前的代碼是實際產生異常的一個,那麼我想,它失敗,因爲url在嘗試獲取連接時是null

但是,錯誤堆棧跟蹤在註釋行第36行顯示錯誤。所以,如果我的猜測是錯誤的,請編輯您的問題,並提供匹配的代碼和錯誤消息,並標記引發異常的代碼行。


你並不孤單:same problem

+0

我編輯了代碼,以進一步解釋我在各種線路上嘗試過的內容。謝謝回覆。我也使用了IP地址以及域名。仍然無濟於事。 – Norm 2010-08-27 12:22:15

0

我也遇到過這個問題。 UniTokens假設有一個字節到字符的一對一轉換,但並非所有平臺都是如此。將參數傳遞給JVM可避免此問題。嘗試-Dfile.encoding =「windows-1252」或-Dfile.encoding =「US-ASCII」

相關問題