Comment utiliser les 5 interfaces JDBC en Java?

Vous devez connaître cinq interfaces clés de JDBC. Les interfaces sont déclarées dans le JDK. Elles sont comme toutes les autres interfaces et classes que vous avez vues dans ce livre. Par exemple, dans le Chapitre 9, “Collections et Generics,” vous avez travaillé avec l’interface List et la classe concrète ArrayList.

Avec JDBC, les classes concrètes proviennent du pilote JDBC. Chaque base de données a un fichier JAR différent avec ces classes. Par exemple, le JAR de PostgreSQL s’appelle quelque chose comme postgresql-9.4–1201.jdbc4.jar. Le JAR de MySQL s’appelle quelque chose comme mysql-connector-java-5.1.36.jar. Le nom exact dépend du fournisseur et de la version du JAR pilote.

Ce JAR pilote contient une implémentation de ces interfaces clés ainsi qu’un certain nombre d’autres interfaces. L’essentiel est que les implémentations fournies savent comment communiquer avec une base de données. Il existe également différents types de pilotes; heureusement, vous n’avez pas besoin de connaître cela.

La Figure 15.2 montre les cinq interfaces clés que vous devez connaître. Elle montre également que l’implémentation est fournie par un JAR pilote imaginaire Foo. Ils collent astucieusement le nom Foo dans toutes les classes.

Vous avez probablement remarqué que nous ne vous avons pas dit comment les classes d’implémentation sont appelées dans n’importe quelle base de données réelle. Le point principal est que vous ne devriez pas savoir. Avec JDBC, vous utilisez uniquement les interfaces dans votre code et jamais les classes d’implémentation directement. En fait, elles pourraient même ne pas être des classes public.

Que font ces cinq interfaces? À un niveau très élevé, nous avons ce qui suit:

  • Driver: Établit une connexion à la base de données
  • Connection: Envoie des commandes à une base de données
  • PreparedStatement: Exécute une requête SQL
  • CallableStatement: Exécute des commandes stockées dans la base de données
  • ResultSet: Lit les résultats d’une requête

Interfaces clés JDBC

Toutes les interfaces de base de données sont dans le package java.sql, donc nous omettons souvent les imports tout au long de ce chapitre.

Dans cet exemple suivant, nous vous montrons à quoi ressemble le code JDBC, de bout en bout. Si vous êtes nouveau à JDBC, remarquez simplement que trois des cinq interfaces sont dans le code. Si vous êtes expérimenté, rappelez-vous que le code utilise la classe DriverManager au lieu de l’interface DataSource.

public class MaPremiereConnexionBaseDeDonnees {
  public static void main(String[] args) throws SQLException {
    String url = "jdbc:hsqldb:file:zoo";
    try (Connection conn = DriverManager.getConnection(url);
        PreparedStatement ps = conn.prepareStatement(
          "SELECT nom FROM exhibits");
        ResultSet rs = ps.executeQuery()) {
      while (rs.next())
        System.out.println(rs.getString(1));
    }
  }
}

Si l’URL utilisait notre pilote imaginaire Foo, DriverManager retournerait une instance de FooConnection. L’appel à prepareStatement() retournerait alors une instance de FooPreparedStatement, et l’appel à executeQuery() retournerait une instance de FooResultSet. Puisque l’URL utilise hsqldb à la place, il retourne les implémentations que HyperSQL a fournies pour ces interfaces. Vous n’avez pas besoin de connaître leurs noms. Dans le reste du chapitre, nous expliquons comment utiliser les cinq interfaces et entrons plus en détail sur ce qu’elles font. À la fin du chapitre, vous écrirez vous-même du code comme celui-ci.

Compilation avec des Modules

Presque tous les packages sont dans le module java.base. En revanche, les classes JDBC sont toutes dans le module java.sql. Elles sont également dans le package java.sql. Les noms sont les mêmes, donc ils devraient être faciles à retenir. Lorsque vous travaillez avec SQL, vous avez besoin du module java.sql et import java.sql.*.

Nous recommandons de séparer vos études pour JDBC et les modules. Vous pouvez utiliser le classpath lorsque vous travaillez avec JDBC et réserver votre pratique avec le chemin du module pour quand vous étudiez les modules.

Cela dit, si vous voulez utiliser le code JDBC avec des modules, n’oubliez pas de mettre à jour votre fichier module-info pour inclure ce qui suit:

requires java.sql;
Interfaces dans le JDKImplémentation dans le pilote
DriverFooDriver
ConnectionFooConnection
PreparedStatementFooPreparedStatement
CallableStatementFooCallableStatement
ResultSetFooResultSet