2D对象阵列上的ArrayStoreException

时间:2016-06-29 11:46:09

标签: java arrays multidimensional-array java-8

我正在尝试使用Object[][]填充Object[]数组,就像向表中添加行一样。但我得到的只是java.lang.ArrayStoreExceptiondata[resultSet.getRow() - 1]= mailbox;。 我是谁? SQL部分正在运行

public static Object[][] getMailboxes() {
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    Object[][] data = null;
    try {
        statement = conn.prepareStatement(GET_MAILBOX, ResultSet.TYPE_SCROLL_INSENSITIVE,
                CONCUR_READ_ONLY);
        statement.execute();
        resultSet = statement.getResultSet();
        ResultSetMetaData rsmd = resultSet.getMetaData();
        resultSet.last();
        data = new String[resultSet.getRow()][7];
        resultSet.beforeFirst();
        Object[] mailbox = new Object[7];
        while (resultSet.next()) {
            for (int i = 0; i < 7; i++) {
                System.out.println(i+" column of row "+resultSet.getRow());
                if (0 == i) {
                    mailbox[i] = resultSet.getInt(i + 1);
                } else if (6 == i || 5 == i) {
                    mailbox[i] = resultSet.getBoolean(i + 1);
                } else {
                    mailbox[i] = resultSet.getObject(i + 1);
                }
            }
            data[resultSet.getRow() - 1]= mailbox;
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }
    return data;
} 

2 个答案:

答案 0 :(得分:0)

更改

data = new String[resultSet.getRow()][7];

data = new Object[resultSet.getRow()][7];

因为您试图在此数组中存储非String s的对象,所以它们不能存储在String[][]数组中。

答案 1 :(得分:0)

从文档ArrayStoreException看来,您将错误的类型存储到数组变量中。 尝试将数组声明为字符串数组,i。即

String[][] data = null;

除此之外,您可以将return语句移动到try块中,以便在该块中声明结果变量。如果您的尝试阻止失败,您无论如何都可以return null