2010-11-26 16 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]);