JDBC Resultset vs Rowset lequel choisir et quand?
Donc je suis au courant de certaines différences relatives, c'est à dire, le jeu de résultats a une "connexion" pour la base de données alors qu'un ensemble de lignes œuvres "déconnectée" de la mode.
Mais c'est à peu près ce que je comprends (peut être incorrecte 🙂
Ma question est donc la ce - dans quelles circonstances est l'un prime sur l'autre? Quels sont leurs points forts/points faibles?
- De ce que je ressens un ensemble de lignes, de travail en
mode déconnecté en particulier pour les
"lecture seule" des requêtes, aurait
meilleure performance dans un très
simultanées du système. Est-ce exact?
Si c'est le cas est-il sûr de dire
Ensemble de lignes est toujours préférable de
Jeu de résultats pour les requêtes en lecture seule? - Si je suis correct itération sur la
Ensemble de lignes ne jette pas des Exceptions SQL,
mais est-ce un avantage? Les autres
étant que l'ensemble de lignes est sérialisable.
Mais mon souci c'est principalement à partir d'un
point de vue des performances ce qui serait
le choix? - Mais le fait même de la matière pour
lire-écrire des requêtes?? Pouvez-vous synchroniser le
Jeu de résultats de la DB? (Je ne suis pas
assurez-vous si c'est possible (Il peut être
et j'ai juste ne peut pas se rappeler ou google
assez bien 🙂 Ça fait un moment
avec raw JDBC...
Des idées? Il y a quelques lacunes dans mes connaissances, comme c'est évident 🙂
La raison pour laquelle je demande c'est que je voudrais choisir entre la mise en œuvre de Printemps-Jdbc est ResultSetExtractor Interface de rapport de retour d'un SqlRowSet lors du traitement de certaines données. Cette question m'a appris curieux de savoir comment décider quoi choisir quand, autres que de jeter une pièce de monnaie 🙂
source d'informationauteur PhD
Vous devez vous connecter pour publier un commentaire.
Ensemble de lignes
ensemble de lignes
est presque toujours le bon choix, il est plus complet et dispose de tous les avantages que vous avez énumérés ainsi que d'avoir des implémentations spécialisées à des fins spéciales, comme déconnectéCachedRowSet
qui est ce que j'ai toujours utiliser lorsque les données seront tenir en mémoire, afin que je puisse libérer la connexion de retour à la piscine aussi rapidement que possible afin d'être réutilisé.ResultSet
ne devrait jamais faire partie d'un marché public.Connecté
ResultSet/Rowset
devrait jamais échapper à la méthode ou au pire, l'objet qui les a créés. Au moins avec unRowSet
vous pouvez le déconnecter et le client n'a pas à se préoccuper de la mise en œuvre. *À moins que vous écrivezJDBC
spécifiques de la bibliothèque de code qui interagit ou s'appuie sur desResultSet
des caractéristiques spécifiques ou à des contrats.Si vous êtes juste de transférer les résultats d'une requête,
JDBC
classes spécifiques devraient faire partie de votre contrat public.Idéalement, vous souhaitez matérialiser
RowSet/ResultSet
contenu de typesafe Objets du Domaine le passer autour.Dans la plupart des cas vous souhaitez matérialiser un
List/Set
de domaine objets à manipuler et travailler au lieu de couplage votre code directement à laJDBC
api.Moderne prend une
ResultSetMapper<T>
classe exister pour gérer la génération typesafe domaine instances à l'aide d'unVisitor
modèle parce que c'est le idiomatiques façon de faire les choses.Je suis en désaccord avec JR réponse. L'ensemble de lignes est souvent un bon choix, mais comme toujours, la meilleure réponse dépend de votre situation et de vos besoins. À l'aide d'un ensemble de lignes pour tout ce qui ne sera pas le rendement dysfonctionnel code, mais il peut offrir un rendement plus lent qu'un jeu de résultats (la commune JdbcRowSet mise en œuvre est un wrapper pour un ResultSet).
Si vous avez besoin d'utiliser votre objet de résultat dans le code modulaire qui nécessite un JavaBean, puis des ensembles de lignes de satisfaire les exigences minimales de Java Beans.
Si vous le développement du code pour un multithread/serveur d'application, alors vous devez accepter la concession que tous les Java Beans sont mutables et donc pas thread-safe. En conséquence, ni le jeu de résultats, ni d'ensembles de lignes sont thread-safe.
Si vous écrivez du code qui utilise des requêtes de base de données et les traduit en Java modèle de données d'objets à utiliser dans le reste de votre application, alors il est probable que les ensembles de lignes sont moins performantes que les jeux de résultats.
Dans beaucoup de code que j'ai écrit, quand je reçois une base de données JDBC requête, j'ai été en utilisant simplement le jeu de résultats, le processus de retrievd lignes immédiatement dans une Liste de données des objets de modèle. Le jeu de résultats n'a même pas de survivre à l'appel de la méthode qui effectue la traduction. À mon avis, c'est bon ... parce que des jeux de résultats (et donc des ensembles de lignes) consomment beaucoup de ressources, et vous voulez qu'ils soient disponibles pour gc dès que vous le pouvez.
Dans ce mode, je n'ai même pas besoin de toutes les nouvelles fonctionnalités de jeu de résultats, sans parler de l'ensemble de lignes. J'ai simplement effectuer une itération de l'avant une fois à travers le jeu et de générer une Liste de lignes de résultat.
Il y a des situations dans lesquelles les ensembles de lignes sont hautement souhaitables. Depuis les ensembles de lignes sont sérialisables et ostensiblement "léger", déconnecté CachedRowSet (par exemple) représente un raisonnablement efficace le mécanisme de transmission de requête de base de données de résultats entre les sites, surtout si vous voulez que les données puissent être mises à jour in situ. Bien sûr, vous pouvez également sérialiser et de transmettre une Liste d'objets.