JDBC

Java DataBase Connectivity.

Besoin

Conception

Architecture

L'ensemble de ces interfaces JDBC est implémenté par les éditeurs sous forme de pilotes (drivers), classés selons 4 catégories :

  1. Pont JDBC-ODBC si vous avez un pilote ODBC et pas de pilote JDBC
  2. Client natif si vous maîtrisez le poste client
  3. Serveur
    1. si vous accédez à un SGBDR derrière un pare-feu
    2. si votre pilote JDBC ne supporte pas la mutualisation de connexions
    3. si vous souhaitez accéder à des SGBDR différents
  4. Client Java si vous ne maîtrisez pas le poste client
Client Application
API standard J2C
JDBC Connector
JDBC
Pilote JDBC Type 1 Type 2 (Java) Type 3 (Java) Type 4 (Java)
Infrastructure ODBC (natif) Pilote client SGBDR (natif)
Pilote ODBC (natif)
Protocole SGBDR SGBDR Pilote (généralement réseau, comme HTTP, etc.) SGBDR
Serveur SGBDR SGBDR Serveur pilote SGBDR
Pilote type 2 Pilote type 4
SGBDR A SGBDR B

API

JDBC est une API de J2SE comprenant :

  • un cœur définissant les notions de :
    • connexion à une base de données, sur laquelle peuvent être émises :
      • des requêtes
        • de type
          • basique
          • précompilées (SQL dynamique)
          • procédure stockée en base
        • retournant éventuellement des résultat éventuel de cette requête (contenant des données lues dans la base typiquement) que l'on peut :
          • parcourir en avant, arrière, absolu
          • de manière isolée ou non (des modifications extérieures)
          • mettre à jour
  • une extension ajoutant la notion de :
    • sources de données abstraites
      • accessibles via JNDI
      • fournissant généralement une mutualisation (pooling) des connexions
    • transactions globales ou distribuées (support de XA)

Le cœur de l'API de JDBC est intégrée à J2SE depuis J2SE 1.1. Son extension est requise par J2EE.

Implémentation

Limitations

Exemples

Des exemples de pilotes JDBC sont :

Un exemple de code JDBC en environnement J2EE est :

Context namingContext = new InitialContext();<br> <strong>DataSource </strong>dataSource = (<strong>DataSource</strong>) namingContext.lookup (<span class="codeString">"java:comp/env/jdbc/MyDataSource"</span>);<br> <strong><br> Connection </strong>dataSourceConnection = dataSource.<strong>getConnection</strong>();<br> <br> try {<br> <strong> PreparedStatement </strong>selectStatement = connection.<strong>prepareStatement </strong> (<span class="codeString">"SELECT ID, SHORT_NAME, RELATIONSHIPS.TYPE FROM SKILL, RELATIONSHIPS WHERE ID=RELATIONSHIPS.ID_TO AND RELATIONSHIPS.ID_FROM=?"</span>);
selectStatement.<strong>setInt </strong> (1, 123);<br> selectStatement.<strong>setString </strong>(2, <span class="codeString">"UnType"</span>);

<strong> ResultSet</strong> skillSet = selectStatement.<strong>executeQuery</strong>();

List linkedSkills = new ArrayList();<br> while (skillSet.<strong>next</strong>()) { <br> int id = skillSet.<strong>getInt </strong> (<span class="codeString">"ID"</span>);<br> String shortName = skillSet.<strong>getString</strong> (<span class="codeString">"SHORT_NAME"</span>);<br>Skill newSkill = new SkillImpl (id, shortName);<br>linkedSkills.add (newSkill);<br> }

return linkedSkills;<br> }<br> finally {<br> connection.<strong>close</strong>(); // Ferme le statement et le ResultSet <br> }

Voir