Question ClassCastException: java.lang.Object ne peut pas être converti en java.lang.Integer


La racine de mon problème est que j'ai une méthode qui gère les requêtes JDBC et libère toutes les connexions après la requête. Un "ResultSet" est renvoyé à la méthode appelante.

J'ai constaté que je ne pouvais pas simplement renvoyer le ResultSet à la méthode appelante, car avec le ResultSet fermé, toutes les tentatives d'utilisation de celui-ci génèrent une erreur

Donc, avant de fermer les ressources, je parcours le ResultSet et le stocke dans une ArrayList.

Comme la méthode gère toutes les requêtes, je ne sais pas quel type de types sont renvoyés. Par conséquent, ArrayList stocke les fichiers génériques.

Cela fonctionne sauf pour un champ dans une table .. dans une base de données, qui est un champ entier [].

Ce dont je sors, c’est un objet JDBC4Array, et j’ai beaucoup de mal à le transmettre à un Integer [] pour le stocker dans ArrayList. J'ai besoin que ce soit un Integer [].

C’est ce que j’ai en ce moment… C’est après beaucoup de banjaxxing frustrés.

En boucle dans le ResultSet, avant la fermeture de la connexion, je le fais:

            // 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);
            }

Ensuite, dans la méthode d'appel ...

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

        ...
    }

Et je reçois:

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

L'aide serait appréciée. J'ai eu le cerveau noué sur celui-ci.

Merci,


11
2018-02-27 22:10


origine


Réponses:


List#toArray() renvoie un Object tableau. Utilisation List#toArray(T[]) au lieu.

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

32
2018-02-27 22:11