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()andを使用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]);
于 2010-11-26T13:16:52.413 に答える
-3

この例外をスローするコード行はわかりませんが、コードに少なくとも 1 つの問題があります。

result[loop-1][i-1]

ループ = 0 であるため、最初の繰り返しで loop-1 は -1 です。

于 2010-11-26T13:12:31.930 に答える