Connexion à la base

La connexion à la base consiste à demander au DriverManager un objet de type Connection, par l’appel de la méthode getConnection(). Là il n’y a qu’une seule façon de le faire : passer l’URL de la base, un nom de connexion et un mot de passe valides. L’appel de cette méthode renvoie un objet instance d’une classe qui implémente l’interface Connection.

Si l'on a un objet de type DataSource à disposition, alors deux méthodes sont possibles. La première consiste à appeler simplement la méthode getConnection(), sans paramètre. Elle suppose que les identifiants de connexion ont été passés à la création de la DataSource, ce qui est en général le cas. Si ce n'est pas le cas, on peut appeler la méthode getConnection(user, passwd) afin d'obtenir une connexion.

Examinons maintenant les propriétés de cet objet de type Connection.

Comme nous l’avons déjà dit, Connection est une interface. L’objet que nous obtenons est donc une implémentation de cette interface par une classe que nous ne connaissons pas, et que nous n’avons pas besoin de connaître. Cette classe est propre à chaque serveur de base de données, et en général écrite par les développeurs de cette base de données.

L’ouverture et la fermeture d’une connexion à une base de données sont deux choses qui doivent être traitées avec attention. L’ouverture est un processus coûteux. Sur certains serveurs, elle peut prendre plusieurs secondes. Une connexion ouverte sur une base de données est une ressource consommée. Comme toutes les ressources d’un système d’exploitation, elle est « rare », en tout cas, il existe un nombre maximal de connexions ouvertes à un instant donné. Cela rend indispensable la fermeture de toute connexion ouverte.

Le fait que l'ouverture d'une connexion soit un processus coûteux est incontournable, aussi les serveurs d'applications JEE possèdent tous un mécanisme d'optimisation, qui consiste à ouvrir des connexions aux bases en avance, et à les stocker dans une réserve. Lorsqu'une demande de connexion arrive, elle peut être traitée immédiatement. Une fois que l'application n'a plus besoin de cette connexion, il la rend au gestionnaire de cette réserve. La gestion de cette réserve est à la charge du serveur d'application.

Il existe des bibliothèques telles que DBCP (http://commons.apache.org/dbcp/) qui propose des implémentations de ce type, et qui peuvent être utilisées en contexte JSE.

L’interface Connection comporte environ 45 méthodes, que l'on peut regrouper en trois catégories :

Par défaut, le mode de fonctionnement d'un pilote JDBC est auto-commit. Ce qui signifie qu'une demande de validation de transaction est passée à l'issue de chaque requête SQL passée.

L'interface Connection propose deux méthodes :

Les autres méthodes qui permettent de gérer les transactions sont les suivantes :

La notions de save point dans une transaction n'est pas propre à JDBC, puisqu'elle existe également en SQL. Un point de sauvegarde peut être posé dans une transaction à tout moment. Il peut être alors utilisé pour annuler une partie de cette transaction, en appelant la méthode rollback(SavePoint).

Enfin, on peut tester le niveau d’isolation de la transaction courante par appel de la méthode getTransactionIsolation(). Cette méthode renvoie une constante entière. Toutes les constantes possibles sont des variables statiques de la classe Connection.

Distingons tout d’abord trois types de données :

Les constantes retournées par l’appel à la méthode getTransactionIsolation() sont les suivantes.