Java - Connexion à MySQL avec le driver JDBC

Dans ce chapitre ,vous allez étudier les bases de données en java en créant une simple base de données avec une seule table, et étudier comment établir la connexion en utilisant le code java.

Java utilise une API nommé JDBC(Java Database Connectivity) pour se connecter à la base de données. JDBC vous permet de connecter à un grand nombre de gestionnaires de bases de données tels que Oracle, MySQL, PostGre, etc.

C'est quoi JDBC ?

JDBC (Java Database Connectivity) est une interface de connexion entre le programme java et la base de données SQL qui appartient à la société Oracle, créée par la société Sun Microsystems et disponible depuis la version JDK 1.1. Cette technologie est une driver qui définie comment le client a accès à la base de données MySQL. Le driver JDBC fournit des méthodes pour interroger et mettre à jour les données dans la base. JDBC est un outil destiné pour les bases de données relationnelles.

Les classes JDBC sont contenues dans le package java.sql et javax.sql. JDBC permet de multiple implémentations dans la même application. L'API est basée sur un mécanisme qui aide à charger dynamiquement les packages correspondants et les enregistrer avec le Driver Manager. Ce dernier est utilisé pour créer les connexions JDBC.

L'API JDBC a pour usage l’achèvement des tâches suivantes:
  • Établir une connexion avec la base de données relationnelle comme MySQL, Oracle, etc.
  • Envoyer les requêtes SQL pour qu'elles soient exécutées sur le serveur de la base de données.
  • Traiter les résultats retournées par l'exécution de la requête SQL.

Les types de drivers JDBC

  1. JDBC-ODBC Bridge (Type 1): Ce pilote utilise le pilote ODBC pour connecter à la base de données de serveur. On doit avoir le pilote ODBC installé dans la machine qu'on veut avec se connecter à la base de données, c'est pour ça ce pilote est dépassé et doit être utilisé seulement quand on a pas le choix.
  2. L'API Native (Type 2): Ce type convertit les ordres JDBC pour appeler la BDD via un pilote native sur le client. On doit avoir l'API de la base de données client installée sur la machine pour qu'on puisse établir la connexion.
  3. Un driver écrit en java utilisant un Middleware (Type 3): Ce type utilise un protocole de réseau pour envoyer des messages au serveur intermédiaire qui peut dialoguer avec différents types de bases de données. Ce driver peut être facilement utilisé avec une applet mais on doit avoir le serveur intermédiaire installé pour travailler avec ce driver. Ce pilote n'est pas très utilisé à cause de sa faible performance.
  4. Un driver java utilisant le protocole natif (Type 4): C'est le pilote préféré parce qu'il appelle directement la base de données en convertissant les messages JDBC à un protocole réseau compatible avec le serveur. On doit utiliser des pilotes spécifique, comme OJDBC fournit par Oracle et MySQL Connector/J pour les base de données MySQL.

Les classes de l'API JDBC

Les classes sont dans le packages java.sql. Les 4 classes importantes sont: DriverManager, Connection, Statement et PreparedStatement, et ResultSet.

DriverManager: responsable du chargement et configuration de la BDD.
Connection: connecter en authentifiant à la base de données.
Statement: envoyer la requête sql à la base de données.
ResultSet: parcourir les résultats récupérés de la base de données dans le cas d'une sélection de données.

Configuration de la base de données

On va lire la configuration détaillée de la base de données à partir des fichiers, donc on peut facilement basculer de Oracle vers MySQL et vice-vers-ça en changeant les détails suivants:

#mysql DB properties
#DB_DRIVER_CLASS=com.mysql.jdbc.Driver
#DB_URL=jdbc:mysql://localhost:3306/UserDB
#DB_USERNAME=usermysql
#DB_PASSWORD=usermysqlpw
#Oracle DB Properties
DB_DRIVER_CLASS=oracle.jdbc.driver.OracleDriver
DB_URL=jdbc:oracle:thin:@localhost:1571:MyDBSID
DB_USERNAME=useroracle
DB_PASSWORD=useroraclepw

La configuration est la chose la plus importante pendant l'utilisation de l'api JDBC. La première chose à faire est le choix de la classe du pilote à utiliser. Pour MySQL, le pilote est com.mysql.jdbc.Driver et pour Oracle c'est oracle.jdbc.driver.OracleDriver. Les deux implémentent l'interface java.sql.Driver. Vous trouverez ces deux classes dans leur fichier jar.

La deuxième chose importante est l'url connexion de la base de données. Chaque pilote a sa propre configuration de l'url mais ils ont le même hostport et schema dans l'url de connexion. Pour la connexion MySQL, le format est jdbc:mysql://<HOST>:<PORT>:<SCHEMA>.

Un autre détail important est le nom de l'utilisateur et le mot de passe pour connecter à la base de données.

Connexion à la base de données MySQL

Ce programme lit les propriétés et crée la connexion avec MySQL.

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DBConnection {

public static Connection getConnection() {
Properties props = new Properties();
FileInputStream fis = null;
Connection con = null;
try {
fis = new FileInputStream("db.properties");
props.load(fis);

// load the Driver Class
Class.forName(props.getProperty("DB_DRIVER_CLASS"));

// create the connection now
con = DriverManager.getConnection(props.getProperty("DB_URL"),
props.getProperty("DB_USERNAME"),
props.getProperty("DB_PASSWORD"));
} catch (IOException | ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
}
Premièrement on lit la configuration de la base de données à partir du fichier property puis on charge le pilote JDBC et on utilise DriverManager pour créer la connexion. L'appel de la méthode Class.forName() est important parce qu'il crée une instance de la classe, pas avec l'opérateur new mais juste on le crée et on l'utilise pas. L'objet va être créé dans la mémoire et relié tout seul à DriverManager.

Pour établir la connexion à la base de données MySQL il faut instancier l'objet de la classe Connection en lui précisant l'url pour y accéder. La méthode getConnection() crée la connexion avec:
  • Le nom de la base de donnée en précisant l'url
  • Le nom d'utilisateur
  • Le mot de passe
La méthode getConnection() lève une exception java.sql.SQLException si la connexion faillit.