Ответ 1
List#toArray()
возвращает массив Object
. Вместо этого используйте List#toArray(T[])
.
Integer[] arg = (Integer[]) comps.toArray(new Integer[comps.size()]);
Корень моей проблемы заключается в том, что у меня есть метод, который обрабатывает запросы 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;
Помощь будет оценена по достоинству. Я забрал свой мозг в узел на этом.
Спасибо,
List#toArray()
возвращает массив Object
. Вместо этого используйте List#toArray(T[])
.
Integer[] arg = (Integer[]) comps.toArray(new Integer[comps.size()]);