Question

Je construis une application en Java pour récupérer des données de la base de données MySQL. Après avoir exécuté une requête, j'obtiens un ResultSet et procédez comme suit pour extraire les enregistrements:

while (rs.next())
        {
            for (int column = 1; column <= rm.getColumnCount(); column++) {
                row.add(rs.getObject(column));
            }
            result.add(row.toString());
            row.clear();
        }

rs = ResultSet et rm = ResultSetMetaData

Le problème est que je dois faire result.add (row.toString ()); plutôt que simplement result.add (row); (avec lequel 'souhaite créer une ArrayList à deux dimensions). Sinon, les résultats sont vides.

J'ai essayé de placer row.clear (); au début, avant la boucle pour , mais tous mes résultats sont renseignés avec plusieurs occurrences du dernier enregistrement. Tout comme la ligne n'a pas été ajoutée au résultat jusqu'à la toute fin, lorsqu'elle est égale au dernier enregistrement. Ai-je besoin de " commettre " la rangée de la liste de tableaux avant de l'ajouter en tant qu'élément à une autre liste de tableaux? Si c'est le cas, comment? De plus, par curiosité, pourquoi .toString () fonctionne-t-il différemment?

Était-ce utile?

La solution

En ajoutant row.toString (), vous créez un nouvel objet String à ajouter au résultat.

D'autre part, en ajoutant row, vous ajoutez le même objet au résultat. Par conséquent, chaque fois que row.clear () est appelé, toutes les lignes du résultat sont vides.

Ce que vous devriez faire est de créer un nouvel objet row avant la boucle for, et ne pas faire row.clear (). Voici un exemple.

while (rs.next())
        {
            row = new ArrayList();

            for (int column = 1; column <= rm.getColumnCount(); column++) {
                row.add(rs.getObject(column));
            }

            result.add(row);
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top