2009-05-06 7 views
3

Nous avons une instruction préparée en Java et nous entendons qu'il est différent de l'instruction dans la manière dont cette instruction préparée n'a pas besoin d'être compilée chaque fois qu'elle est utilisée.Question sur l'instruction préparée en Java

Ma question est où est cette déclaration compilée stockée? Dans le code client qui l'utilise ou est-il stocké par la base de données?

Pourquoi une base de données DB stocke-t-elle une instruction compilée et si c'est le cas pendant combien de temps?

Répondre

4

Les bases de données ont un cache de requête, ce qui signifie que lorsque vous exécutez une requête, la base de données met en cache la requête analysée/compilée et peut-être le plan de requête pour éliminer les futurs calculs.

Les instructions préparées sont généralement mises en cache d'abord au niveau de l'application, où le conteneur d'application est responsable de la gestion du cache d'instructions. La plupart des conteneurs d'applications ont des options pour contrôler le cache des instructions préparées (par exemple: glassfish). Comme vous pouvez le voir here, la différence principale est comme vous l'avez dit: avec les instructions préparées, l'application réduit le coût de compilation de la même déclaration encore et encore. En remarque, pour la plupart des conteneurs d'application, l'instruction doit être exactement la même (espace inclus) afin d'être réutilisée correctement, alors soyez prudent lorsque vous utilisez des requêtes manuscrites.

+0

Mig, Cela signifie que le pilote JDBC a la capacité de convertir une instruction préparée en une instruction compilée? Ce qui signifie que le pilote est assez intelligent pour analyser une requête et identifier les erreurs syntaxiques? – Geek

+0

AFAIK, le pilote n'analyse pas les requêtes, seul le DB le fait. Toute erreur syntaxique est renvoyée par l'analyseur de base de données. Mais le serveur d'application est assez intelligent pour réutiliser les mêmes instructions où seuls les arguments (les espaces réservés '?) Diffèrent. –