Подтвердить что ты не робот

ClassCastException: java.lang.Object не может быть добавлен в java.lang.Integer

Корень моей проблемы заключается в том, что у меня есть метод, который обрабатывает запросы JDBC и освобождает все соединения после запроса. "ResultSet" возвращается к вызывающему методу.

Я обнаружил, что я не могу просто передать ResultSet обратно вызывающему методу, потому что при закрытии ResultSet любые попытки использовать его получают ошибку "Заблокировано уже закрыто".

Поэтому, прежде чем я закрою ресурсы, я прохожу через ResultSet и сохраняю его в ArrayList.

Поскольку метод обрабатывает любой запрос, я не знаю, какие типы возвращаются. Поэтому ArrayList хранит общие данные.

Это работает, за исключением одного поля в одной таблице.. в одной базе данных, которая является полем Integer [].

Я получаю оттуда объект JDBC4Array, и у меня есть время, затрачиваемое на Integer [] для хранения в ArrayList. Мне нужно, чтобы это было Integer [].

Это то, что у меня есть прямо сейчас... Это после многих разочарований, связанных с баньяксингом.

При переходе через ResultSet, прежде чем соединение будет закрыто, я сделаю следующее:

            // For every row in the ResultSet
            while (rs.next()) {
                // Initialize a ITILRow for this ResultSet row
                ITILRow row = new ITILRow();

                // For each column in this row, add that object to the ITILRow
                for (int colNum=1; colNum<=numCols; colNum++) {
                    Object o = rs.getObject(colNum);

                    // JDBC4Array is a real pain in the butt
                    ArrayList<Integer> tmpList = new ArrayList<Integer>();
                    if (o != null) {
                        if (o.getClass().getSimpleName().endsWith("Array")) {
                            // At least at this time, these Arrays are all Integer[]
                            Array a = (Array) o;
                            Integer[] ints = (Integer[]) a.getArray();
                            for (Integer i : ints) {
                                tmpList.add(i);
                            }
                            o = tmpList;
                        }
                    }

                    row.add(o);
                }

                // Add the ITILRow to allRows
                allRows.add(row);
            }

Затем в вызывающем методе...

    for (ITILRow row : allRows) {
        ...
        ArrayList comps = (ArrayList) row.getObject(5);
        Integer[] argh = (Integer[]) ((ArrayList<Integer>) comps).toArray();

        ...
    }

И я получаю:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

Помощь будет оценена по достоинству. Я забрал свой мозг в узел на этом.

Спасибо,

4b9b3361

Ответ 1

List#toArray() возвращает массив Object. Вместо этого используйте List#toArray(T[]).

Integer[] arg = (Integer[]) comps.toArray(new Integer[comps.size()]);