0

谁能告诉我我在这里做错了什么?我运行了大约 100 次,大约 2-8 次失败并出现错误:java.lang.ArrayIndexOutOfBoundsException: 10

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;
}
4

2 回答 2

0

我建议不要使用rs.last()andrs.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]);
于 2010-11-26T13:16:52.413 回答
-3

尽管我不知道哪一行代码引发了此异常,但我在您的代码中至少看到了一个问题:

result[loop-1][i-1]

loop-1 在第一次迭代时为 -1,因为 loop = 0

于 2010-11-26T13:12:31.930 回答