Se connecter à une base MySQL avec le driver JDBC

JDBC (Java Data Base Connectivity) est l'interface JAVA d'accès aux bases de données SQL. Les opérations de bases y sont définies: sélectionner la base de données, exécuter une requête et parcourir le resultset.

1. Ajouter le pilote MySQL
Pour communiquer avec les bases de données MySQL, le driver est à importer soi-même, n'étant pas installé par défaut dans JAVA.
télecharger MySQL Connector

Après avoir extrait la librairie jar, que ce soit sous NetBeans ou que ce soit sous Eclipse, il suffit d'ajouter le driver à la librairie du projet.
visualiser le tutorial sous NetBeans


2. Charger le driver
L'appel à Class.forName déclenche un chargement dynamique du pilote dans le DriverManager.
   
try {
  Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (InstantiationException ex) {
  Logger.getLogger(MySQLCli.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
  Logger.getLogger(MySQLCli.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
  Logger.getLogger(MySQLCli.class.getName()).log(Level.SEVERE, null, ex);
}

L'erreur la plus courante java.lang.ClassNotFoundException: com.mysql.jdbc.Driver se déclenche lorsque qu'on a oublié de déclaré le driver dans la variable d'environnement CLASSPATH.

3. Se connecter à la base de données
La fonction DriverManager.getConnection établit une connexion avec le serveur de base de donnée.
try {
  java.sql.Connection connection = DriverManager.getConnection("jdbc:mysql:URL", "user, "password");
} catch (SQLException ex) {
  Logger.getLogger(MySQLCli.class.getName()).log(Level.SEVERE, null, ex);
}

Lorsque l'URL de la base est incorrecte, une erreur de type com.mysql.jdbc.exceptions.jdbc4: Communications link failure est déclenchée.

4. Exécuter une requête
La communication étant établie, la requete SQL est soumise au serveur avec statement.executeQuery et le résultat est contenu dans un ResultSet.
try {
  Statement statement = dbConnection.createStatement();
  ResultSet rs = statement.executeQuery(sql);
} catch (SQLException ex) {
  Logger.getLogger(MySQLCli.class.getName()).log(Level.SEVERE, null, ex);
}

Le driver MySQL indique dans MySQLSyntaxErrorException l'emplacement de l'erreur dans la requête.

5. Exemple de Class
Pour simplifier la communication avec le serveur ou pour utiliser l'héritage ensuite, voici un exemple simple de client MySQL.

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * MySQL client
 * @author Fobec 2010
 */
public class MySQLCli {

    private String dbURL = "";
    private String user = "";
    private String password = "";
    private java.sql.Connection dbConnect = null;
    private java.sql.Statement dbStatement = null;

    /**
     * Constructeur
     * @param url
     * @param user
     * @param password
     */
    public MySQLCli(String url, String user, String password) {
        this.dbURL = url;
        this.user = user;
        this.password = password;
    }

    /**
     * Connecter à la base de donnée
     * @return false en cas d'échec
     */
    public Boolean connect() {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            this.dbConnect = DriverManager.getConnection("jdbc:mysql:" + this.dbURL, this.user, this.password);
            this.dbStatement = this.dbConnect.createStatement();
            return true;
        } catch (SQLException ex) {
            Logger.getLogger(MySQLCli.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(MySQLCli.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(MySQLCli.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(MySQLCli.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }

    /**
     * Executer une requete SQL
     * @param sql
     * @return resultat de la requete
     */
    public ResultSet exec(String sql) {
        try {
            ResultSet rs = this.dbStatement.executeQuery(sql);
            return rs;
        } catch (SQLException ex) {
            Logger.getLogger(MySQLCli.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    /**
     * Fermer la connexion au serveur de DB
     */
    public void close() {
        try {
            this.dbStatement.close();
            this.dbConnect.close();
            this.dbConnect.close();
        } catch (SQLException ex) {
            Logger.getLogger(MySQLCli.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Exemple d'utilisation de la class
     * @param args
     */
    public static void main(String[] args) {
        MySQLCli mysqlCli = new MySQLCli("//localhost", "", "");
        if (mysqlCli.connect()) {
            try {
                ResultSet rs = mysqlCli.exec("SELECT * FROM table");
                if (rs != null) {
                    while (rs.next()) {
                        System.out.println("Valeur: " + rs.getString(1));
                    }
                }
            } catch (SQLException ex) {
                Logger.getLogger(MySQLCli.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            System.out.println("Mysql connection failed !!!");
        }
        mysqlCli.close();
    }
}

Ajouter un commentaire
Pseudo
Adresse email
Site internet (optionnel)
Votre commentaire
Fiche de l'article
Mise a jour23/06/2010
VisualisationVu 6223 fois
PublicInternaute
CategorieJAVA - Tutorial - Premiers Pas
Auteur de l'article
fobec fobec
connecté le 14/02/2012
36 ans - France Nord-Est
101 articles dans la section
Contacter l'auteur
Partager l'article