Źródłem mojego problemu jest to, że mam metodę, która obsługuje zapytania JDBC i uwalnia wszystkie połączenia po zapytaniu. "ResultSet" jest przekazywany do metody wywołującej.ClassCastException: java.lang.Object nie może być rzutowany na java.lang.Integer
Zauważyłem, że nie mogę po prostu przekazać ResultSet z powrotem do metody wywołującej, ponieważ przy zamkniętym ResultSet, wszelkie próby jego użycia powodują błąd już zamknięty.
Więc zanim zamknę zasoby, przechodzę przez ResultSet i zapisuję go w tablicy ArrayList.
Ponieważ metoda obsługuje dowolne zapytanie, nie wiem, jakiego rodzaju typy są zwracane. Dlatego ArrayList przechowuje ogólne s.
Działa to z wyjątkiem jednego pola w jednej tabeli .. w jednej bazie danych, czyli w polu Integer [].
Co mogę uzyskać z obiektu JDBC4Array? Potrzebuję tego, aby być Integer [].
To jest to, co mam teraz ... To po wielu sfrustrowanych boksach.
Podczas zapętlenie poprzez ResultSet, zanim połączenie zostanie zamknięte, to zrobić:
// 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);
}
Następnie w metodzie wywołującej ...
for (ITILRow row : allRows) {
...
ArrayList comps = (ArrayList) row.getObject(5);
Integer[] argh = (Integer[]) ((ArrayList<Integer>) comps).toArray();
...
}
I otrzymujemy:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
Pomoc byłaby doceniana. Włączyłem mój mózg w węzeł na ten temat.
Dzięki,
Holy smokees you were fast. Dzięki, że to zrobili. Yay! Idę dalej! Dziekuję Dziekuję Dziękuję. – Lurk21
Myślę, że parametr powinien być "nowa liczba całkowita [0]" - w rzeczywistości nie potrzebujesz żadnego miejsca w obiekcie przekazanym, służy tylko do uzyskania informacji o klasie, ale musisz go utworzyć. – AgilePro
@AgilePro: Jeśli przekazana tablica jest wystarczająco duża (przynajmniej elementy comps.size()), przekazana tablica zostanie wypełniona i zwrócona przez metodę toArray. Zwiększenie wystarczającej ilości tablic uniemożliwi utworzenie dodatkowej tablicy tego samego typu. – jarnbjo