2010-11-26 55 views
0

任何人都可以告訴我我在做什麼錯嗎?我跑這個約100倍,約2-8次失敗,出現錯誤:java.lang.ArrayIndexOutOfBoundsException: 10從JDBC ResultSet創建數組時創建java.lang.ArrayIndexOutOfBoundsException

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

你可以:提供`getResultSwitch`的代碼並給我們提供異常的行號? 小建議,重用您的數據:替換`getResultSwitch(metaData.getColumnType(i)...` `getResultSwitch(this.columnTypes [i] ...` – Destroyica 2011-09-30 13:40:04

+0

什麼是行號引發異常?提供一些你可以重新格式化帶有變量定義的嵌套方法調用,以查找異常的根 – 2013-08-18 04:59:58

回答

-3

雖然我不知道哪一行代碼引發此例外,我看到在你的代碼的至少一個問題:

result[loop-1][i-1] 

環-1 -1的第一次迭代,因爲循環= 0

+0

感謝AlexR爲您提供了快速響應!關於它應該是什麼的任何建議? – James 2010-11-26 13:15:54

0

而不是使用rs.last()rs.getRow(),使靜態數組,我會建議,而不是你做的結果行的一個ArrayList,並將其轉換的當你喲時變成一個數組你完成了。

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]);