2010-08-27 2 views
1

Я новичок в Java, и я пытаюсь использовать JDBC для подключения к базе данных UniVerse. Я использую Sun Java 6 JDK для использования NetBeans для создания проекта. Мой простой тест ниже сборка, однако она дает ошибку ниже:Почему я получаю исключение ArrayIndexOutOfBoundsException в моем соединении JDBC?

> 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

ответ

2

Это, как представляется, Netbeans связаны. См. Также this topic на форуме. Он работает в Eclipse (и, возможно, во всех других средах).

Это явно ошибка в драйвере UniVerse JDBC. Он, по-видимому, находится внутри статического инициализатора, полагаясь на какое-то определенное состояние окружающей среды, которое отличается от Netbeans. Если бы это не было ошибкой, это вызвало бы гораздо более самоочевидное исключение, а не такое глупое исключение во время выполнения.

Я бы сообщил об этой ошибке IBM/UniVerse.

+1

HOLY CRAP !!! Вот и все. И подумать, что вчера днем ​​я ударился головой о стол. Я так собираюсь поговорить с Rocket об этом. Спасибо, BalusC! И спасибо Stackoverflow. Я предполагаю, что это урегулирует дебаты, над которыми IDE я буду использовать. – Norm

+0

Добро пожаловать. – BalusC

1

Если представленный код является тот, который на самом деле вызвал исключение, то я думаю, это не удается, потому что url - null в то время, когда вы пытаетесь установить соединение.

Но ошибка stacktrace вызывает ошибку в строке 36, которая является строкой комментария. Поэтому, если мое предположение неверно, отредактируйте свой вопрос и укажите соответствующий код и сообщение об ошибке и отметьте строку кода, которая генерирует исключение.


Вы не одиноки: same problem

+0

Я отредактировал код, чтобы объяснить, что я пробовал на разных строках. Спасибо за ответ. Я также использовал IP-адрес, а также имя домена. Все равно нет. – Norm

0

У меня тоже возникла эта проблема. UniTokens предполагает, что есть одно-к-одному преобразование байтов в символы, но это не так для всех платформ. Передача аргумента JVM позволяет избежать этой проблемы. Try -Dfile.encoding = "windows-1252" или -Dfile.encoding = "US-ASCII"