2010-11-26 10 views
0

Kann mir jemand sagen, was ich hier falsch mache? Ich betreibe das etwa 100-mal, und etwa 2-8 mal mit Fehler fehlschlägt: java.lang.ArrayIndexOutOfBoundsException: 10java.lang.ArrayIndexOutOfBoundsException beim Erstellen eines Arrays aus JDBC ResultSet

public String[][] queryResult(String QUERY) throws SQLException{ 

    Connection con = getPoolConnection(); 
    Statement st2 = con.createStatement(); 
    ResultSet rs = st2.executeQuery(QUERY); 
    System.out.println("Run query: "+QUERY); 
    // outPrint(logFile,"Run query: "+QUERY+""); 
    ResultSetMetaData metaData = rs.getMetaData(); 


    int noOfColumns = metaData.getColumnCount(); 
    //System.out.print(metaData.toString()+" : "); 
    this.columnName = new String[noOfColumns]; 
    this.columnTypes = new String[noOfColumns]; 
    for (int i = 1; i <= noOfColumns; i++) { 
     this.columnName[i-1] = metaData.getColumnLabel(i); 
     this.columnTypes[i-1] = metaData.getColumnTypeName(i); 
     System.out.print(this.columnName[i-1]+" - "+this.columnTypes[i-1]+" , "); 

    } 
    System.out.println(" - "); 
    rs.last(); 
    int noOfRows = rs.getRow(); 
    rs.beforeFirst(); 

    String[][] result = new String[noOfRows][noOfColumns]; 

    int loop = 0; 
    while(rs.next()) { 
     loop++; 
     for (int i = 1; i <= noOfColumns; i++) { 
      result[loop-1][i-1] = getResultSwitch(metaData.getColumnType(i), rs, i); 
      //System.out.println("result "+this.columnTypes[i-1]+" : "+result[loop-1][i-1]); 
      System.out.print(result[loop-1][i-1]+" , "); 
     } 
     System.out.println(" - "); 
    } 

    rs.close(); 
    st2.close(); 
    con.close(); 
    //System.out.println("Closed connection."); 

    return result; 
} 
+0

Können Sie: geben Sie den Code von 'getResultSwitch' und geben Sie uns die Zeilennummer, wo die Ausnahme ausgelöst wird? Kleiner Tipp, verwenden Sie Ihre Daten erneut: Ersetzen Sie "getResultSwitch (MetaData.getColumnType (i) ..." von 'getResultSwitch (this.columnTypes [i] ...' – Destroyica

+0

Was ist die Zeilennummer, wo Ausnahme ausgelöst wird? Zeilen von Ihrem Stacktrace, und können Sie verschachtelte Methodenaufrufe mit Variablen-Definitionen neu formatieren, um das Stammverzeichnis der Ausnahme zu finden –

Antwort

-3

Obwohl ich weiß nicht, welche Codezeile diese Ausnahme wirft ich zumindest ein Problem in Ihrem Code sehen:

result[loop-1][i-1] 

Loop-1 -1 auf dem ersten Iteration, weil loop = 0

+0

Danke AlexR für Sie schnelle Antwort! Irgendwelche Vorschläge, was es sein sollte? – James

+0

Nein ist es nicht.Es gibt eine Schleife ++ vor der Zeile in Frage: –

0

statt rs.last() und rs.getRow() mit einem statischen Array zu machen, würde ich vorschlagen, anstatt dass Sie eine Arraylist von Ergebniszeilen zu machen, und wandelt es in ein Array, wenn yo Du bist fertig.

System.out.println(" - "); 
    //rs.last(); 
    //int noOfRows = rs.getRow(); 
    //rs.beforeFirst(); 

    //String[][] result = new String[noOfRows][noOfColumns]; 
    List<String[]> tempResult = new ArrayList<String[]>(); 

    //int loop = 0; 
    while(rs.next()) { 
     //loop++; 
     String[] row = new String[noOfColumns]; 
     for (int i = 0; i < noOfColumns; i++) { 
      row[i] = getResultSwitch(metaData.getColumnType(i+i), rs, i); 
      //System.out.println("result "+this.columnTypes[i-1]+" : "+result[loop-1][i-1]); 
      //System.out.print(result[loop-1][i-1]+" , "); 
      tempResult.add(row); 
     } 
     System.out.println(" - "); 
    } 

    rs.close(); 
    st2.close(); 
    con.close(); 
    //System.out.println("Closed connection."); 
    return tempResult.toArray(new String[0][noOfColumns]); 
+0

Vielen Dank Paul.Jede Chance, mir zu helfen, dies umzuschreiben, um besser zu arbeiten? – James

+0

Danke Paul für Ihre Hilfe, ich versuchte dies und leider bekommen: Ausnahme java.sql.SQLException: Spaltenindex außerhalb des Bereichs. – James

+0

Ich würde hinzufügen das konvertiert es wenn möglich nicht zu einem Array und bleibt bei einer List <> oder ArrayList <> i nstead ist klug. –

Verwandte Themen