java - ArrayIndexOutOfBoundsException 错误,但我认为代码没问题

标签 java swing indexoutofboundsexception

所以我有一个从数据库填充 JTable 的函数。

我这里有

public static TableModel resultSetToTableModel(ResultSet rs) {
try {
    ResultSetMetaData metaData = rs.getMetaData();
    int numberOfColumns = metaData.getColumnCount();
    Vector<String> columnNames = new Vector<String>();

    // Get the column names
    for (int column = 0; column < numberOfColumns; column++) {
    columnNames.addElement(metaData.getColumnLabel(column + 1));
    }

    // Get all rows.
    Vector<Vector<Object>> rows = new Vector<Vector<Object>>();

    while (rs.next()) {
    Vector<Object> newRow = new Vector<Object>();

    for (int i = 1; i <= numberOfColumns; i++) {

                if(isObjectInteger(rs.getObject(i)) && i>1) //checks if the value is Integer else not and is past the first column
                {
                    System.out.println(i+"="+rs.getObject(i));
                    String label = columnNames.get(i); //THE ERROR IS ON THIS PART
                    newRow.addElement(getValue((Integer) rs.getObject(i),label)); //gets the value of specific foreign key id from another table
                }
                else 
                {
                    System.out.println(i+"="+rs.getObject(i));
                    newRow.addElement(rs.getObject(i));
                } //inside row (new Rows)
    }

    rows.addElement(newRow); //outside row
    }
    return new DefaultTableModel(rows, columnNames)
        {
            @Override
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };
} catch (Exception e) {
    e.printStackTrace();

    return null;
}
}

我的数据库中共有 8 列,System.out.println 的输出是:

那个在其他里面:

1=1
2=test
3=A.
4=test
5=test
6=test

那个在 if 里面的

7=1
8=23

如您所见,输出是正确的,但它总是在 String label = columnNames.get(i); 上抛出 Array index out of range: 8 错误

最佳答案

虽然 ResultSet.getObject() 需要一个基于 1 的参数,但 columnNames 是一个 vector ,其索引基于 0。

因此,它的有效值为 0..7不是 1..8。换句话说,if 语句的第一部分应该是:

System.out.println(i + "=" + rs.getObject(i));
String label = columnNames.get(i-1); // NOT "i".

关于java - ArrayIndexOutOfBoundsException 错误,但我认为代码没问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33064980/

相关文章:

java - 在没有读锁的情况下使用 writeLock 是否安全?

java - 修复 Java 7 中 swing 原始类型的使用

java - 在我的情况下,CacheBuilder 可以替代 MapMaker 吗?

java - 我如何支持缩放显示在 JScrollPane 中的 View 以避免显示 JScrollBars 到最小尺寸?

java - 重新验证/重新绘制按钮面板的问题

c++ - 数组索引循环开始而不是内存访问错误

java - LinkedList 上的 ArrayIndexOutOfBoundsException : -32443 with iterator . 下一个

xml - JAXB解析错误: ArrayIndexOutOfBoundsException

java - 纹理加载

java - 在Java中,如何使用特定数量的随机值初始化二维数组。