Moyen efficace pour Gérer ResultSet en Java
Je suis à l'aide d'un jeu de résultats en Java, et je ne suis pas sûr de la façon de bien le fermer. Je suis envisage d'utiliser le jeu de résultats, afin de construire une table de hachage, puis de fermeture le jeu de résultats par la suite. Est-ce HashMap technique efficace, ou il y a des moyens plus efficaces de gestion de cette situation? J'ai besoin de deux clés et des valeurs, donc, à l'aide d'une table de hachage, semblait un choix logique.
Si à l'aide d'une table de hachage est la méthode la plus efficace, comment puis-je construire et d'utiliser la table de hachage dans mon code?
Voici ce que j'ai essayé:
public HashMap resultSetToHashMap(ResultSet rs) throws SQLException {
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
HashMap row = new HashMap();
while (rs.next()) {
for (int i = 1; i <= columns; i++) {
row.put(md.getColumnName(i), rs.getObject(i));
}
}
return row;
}
- Post partie du code où vous créez hashmap et de les remplir avec le jeu de résultats.
- Vérifier mon montage..
- Trompeuse nom de la méthode...je ne vois pas de liste de tableaux.
- Ce que vous faites est généralement OK, mais vous avez besoin de
rs.close()
avant votre retour. Copie des données à partir d'un résultatHashMap
est correcte à condition que vous avez besoin pour accéder à l'ensemble du jeu de données. - Désolé pour ça 😛
- Oui j'ai besoin d'accéder à l'ensemble du jeu de données presque tout le temps.
- Ne fermez pas le jeu de résultats dans cette méthode. Le jeu de résultats est passé en paramètre, c'est donc l'appelant responsabilité pour le fermer. Et la clôture doit être fait dans un "enfin" bloc donc il s'est fait même si une Exception est levée.
Vous devez vous connecter pour publier un commentaire.
Fait
EDIT: maintenant que vous avez validé le code, j'ai fait quelques modifications.
J'ai juste nettoyé RHT est pour répondre à éliminer certaines mises en garde et je pensais que je voudrais partager. Eclipse n'a plus de travail:
RHT assez bien a elle. Ou vous pouvez utiliser un RowSetDynaClass et laisser quelqu'un d'autre faire tout le travail 🙂
Un couple de choses à améliorer les autres réponses. Tout d'abord, vous ne devriez jamais vous retourner un
HashMap
, qui est une mise en œuvre spécifique. De retour à la place d'un bon vieuxjava.util.Map
. Mais ce n'est pas vraiment bon pour cet exemple, de toute façon. Votre code ne renvoie la dernière ligne du jeu de résultats comme un (Hash)de la Carte. Au lieu de cela vous voulez retourner unList<Map<String,Object>>
. Pensez à comment vous devez modifier votre code pour le faire. (Ou vous pouvez prendre Dave Newton suggestion).c'est ma solution alternative, au lieu d'une Liste de Carte, je suis en utilisant une Carte de la Liste.
Testé sur des tables de 5000 éléments, sur une distance db, les temps sont autour de 350ms pour eiter méthode.