Un ResultSet charger toutes les données en mémoire ou seulement à la demande?
J'ai un .page jsp où j'ai une interface graphique tableau qui affiche les enregistrements d'une base de données Oracle. Ce tableau permet typique de la pagination de comportement, tels que "PREMIÈRE", "SUIVANT", "PRÉCÉDENT" et "DERNIER". Les enregistrements sont obtenues à partir d'un jeu de résultats Java objet qui est retourné à partir de l'exécution d'une instruction SQL.
Ce ResultSet peut être très grande, donc ma question est:
Si j'ai un ResultSet contenant un million d'enregistrements, mais mon tableau affiche uniquement les données à partir de la dix premiers enregistrements dans le jeu de résultats, les données sont seulement extrait quand j'ai commencer à demander des données d'enregistrement ou de n'toutes les données sont chargées dans la mémoire entièrement une fois que le jeu de résultats est retourné à partir de l'exécution d'une instruction SQL?
Vous devez vous connecter pour publier un commentaire.
Le jeu de résultats Java est un pointeur (ou curseur) pour les résultats dans la base de données. Le jeu de résultats charges d'enregistrements dans des blocs de la base de données. Donc, pour répondre à votre question, les données ne sont récupérées lorsque vous en faites la demande, mais dans les blocs.
Si vous avez besoin de contrôler le nombre de lignes sont extraites à la fois par le pilote, vous pouvez utiliser le setFetchSize() méthode sur le jeu de résultats. Cela vous permettra de contrôler la taille des blocs qu'il récupère à la fois.
JDBC spec ne précise pas si les données sont transmis en continu ou s'il est chargé en mémoire. Oracle flux par défaut. MySQL ne fonctionne pas. Pour obtenir MySQL pour diffuser le jeu de résultats, vous devez définir les paramètres suivants sur la Déclaration:
Tandis que le JDBC spec ne précise pas si l'ensemble des données dans le jeu de résultats serait d'obtenir les cheveux, tout pilote bien écrite ne le ferai pas.
Cela dit, un défilement jeu de résultats peut être plus de ce que vous avez à l'esprit:
(lien rédigé, il a souligné un spyware de page)
Vous pouvez également envisager de la déconnexion d'un ensemble de lignes, c'est stockée dans la session (en fonction de la façon évolutive, votre site doit être):
http://java.sun.com/j2se/1.4.2/docs/api/javax/sql/RowSet.html
La meilleure idée est de faire une sous-requête et l'affichage de 100 ou de 1000 lignes à la fois/en une seule page. Et la gestion de la connexion par le regroupement de connexions.
De faire une sous-requête, vous pouvez utiliser le nombre de lignes dans oracle et la Limite de MES SQL.
permet de dire que nous avons un tableau qui contient 500 enregistrements dans il