Chapitre 1. Introduction

On considère aujourd’hui qu’environ 80% des produits logiciels développés ont besoin d’accéder à une base de données. Dès la conception du langage Java, l’accès aux bases de données a donc été une priorité des concepteurs. L’API JDBC (Java Database Connectivity) a été la première API développée après le JDK, et séparément de lui. Elle fut introduite dans l'API standard dès le JDK 1.1. L’idée originale était de donner la possibilité à un programme Java d’accéder à toute base de données ANSI SQL-2.

Au début des années 90, Microsoft avait écrit ODBC (Object Database Connectivity). La puissance commerciale de cet éditeur avait imposé ce produit à toute l’industrie. ODBC est un jeu d’interfaces en C et C++ permettant d’interroger une base de données d’un programme C ou C++. Tous les fabricants de base de données ont donc développé des pilotes ODBC pour leur serveur. Le pilote étant le composant logiciel reconnu par un code ODBC, et capable de dialoguer avec une base de données spécifique.

Les développeurs de Java ont donc eu la première idée de développer JDBC au-dessus d’ODBC. Les premières versions de JDBC s’adressaient donc à ODBC, ce qui a permis immédiatement à Java de pouvoir dialoguer avec à peu près tous les serveurs de bases de données existants. Même si les performances n’étaient pas bonnes, le pont JDBC-ODBC est un pilote qui s’adresse à un autre pilote, cette possibilité a certainement contribué au succès rapide de Java.

Aujourd’hui l’API JDBC est mature, et la plupart des serveurs de bases de données ont leur pilote JDBC natif.

On distingue plusieurs types de pilotes JDBC, même si cette distinction est de moins en moins d’actualité, tant Java est devenu incontournable pour les vendeurs de base de données.

Voici la liste des différentes versions de JDBC, ainsi que le JDK correspondant.

Techniquement, JDBC est un ensemble d’interfaces qui définissent le schéma général de connexion et d’interrogation des bases de données. Le pilote d’une base de données fournit des classes qui implémentent ces interfaces. Il est donc propre à chaque base, mais on peut l’utiliser de façon transparente en ne considérant que les interfaces. C’est même de cette façon qu’il faut procéder.