ClassCastException: java.lang.L'objet ne peut pas être lancé à java.lang.Entier
La racine de mon problème est que j'ai une méthode qui traite les requêtes JDBC et libère toutes les connexions après la requête. Un "ResultSet" est passé à la méthode appelante.
J'ai constaté que je ne peux pas tout simplement passer le ResultSet retour à l'appel de la méthode, car avec le jeu de résultats fermé, alors que toutes les tentatives pour l'utiliser obtenir un Déjà Fermé à l'erreur.
Donc, avant que je ferme les ressources, je boucle à travers le jeu de résultats et de les stocker dans une liste de tableaux.
Parce que la méthode gère toutes les requêtes, je ne sais pas quel genre de types sont en train de revenir. Par conséquent, la liste de tableaux magasins générique s.
Cela fonctionne sauf pour un champ dans une table .. dans une base de données, qui est un Entier [].
Ce que je sors de là est un JDBC4Array objet, et j'ai un diable de temps à arriver que, pour un Entier[] pour le stockage dans la liste de tableaux. J'ai besoin d'elle pour être un Entier[].
C'est ce que j'ai en ce moment... C'est après beaucoup de frustrés banjaxxing.
Tout en parcourant le jeu de résultats, avant que la connexion est fermée, je fais ceci:
//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);
}
Puis, dans l'appel de la méthode...
for (ITILRow row : allRows) {
...
ArrayList comps = (ArrayList) row.getObject(5);
Integer[] argh = (Integer[]) ((ArrayList<Integer>) comps).toArray();
...
}
Et j'obtiens:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
Aide serait appréciée. J'ai reçu mon cerveau attaché dans un noeud sur celui-ci.
Merci,
OriginalL'auteur Lurk21 | 2013-02-27
Vous devez vous connecter pour publier un commentaire.
Liste#toArray()
retourne unObject
tableau. UtilisationListe#toArray(T[])
à la place.Je pense que le paramètre doit être
new Integer[0]
-- vous n'avez pas besoin de tout l'espace de l'objet transmis, il est seulement utilisé pour obtenir les informations de classe, mais vous devez instancier.Si le tableau transmis est assez grand (au moins comps.size() éléments), le tableau transmis sera rempli et retourné par la méthode toArray. Du tableau assez grand permettra d'éviter une autre matrice du même type pour les créer.
Oh. Qui fait sens. Et puis, oui, il est préférable de faire une de la taille exacte. Cependant, le "nouveau" est manquant au-dessus.
Le casting de
(Integer[])
est même redondant de cette façon. Belle solution !OriginalL'auteur PermGenError