Publié le 23/06/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
1 commentaires

Se connecter a 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 comme sélectionner la base de données, exécuter une requete et parcourir le resultset. L'article traite de la connexion d'une application JAVA avec une base de donnée MySql.

Ajouter et charger 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

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.

Se connecter à la base de données et exécuter une requete

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.

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 requete.

Exemple de Class MySql avec Java

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();
    }
}

L'article traite de la connexion et de l’exécution de requête à partir d'une application JAVA vers une base de donnée MySql. Pour les autres formats de bases de donnée par exemple Sqlite, le principe reste exactement le même que pour MySql, il suffit de charger le pilote de la base pour faire fonctionner la communication.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar Anis Hidouri

Publié par Anis Hidouri

le 27/02/2012 à 15:50:55

Très bon exemple même si le drivers jdbc comporte quelques erreurs !!!

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - tutorial
Mise a jour
23/06/2010
Visualisation
vu 16909 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par xnadyx dans php5

Bonjour,

Est ce qu'il y a un autre moyen d'acces aux donnees Microsoft SQL Server?
Je ne trouve pas de tutoriaux sur Internet.

Merci.

Publié par brayan dans logiciel

je vous retour modem ip pour configury net firwell

Publié par Tactic Rayan dans java

Merci beaucoup, c'est tres interressent, tres longtemps que j'ai recherche ce code

Publié par Fred dans tuto

J'suis d'accord avec Do, PHP est deja un moteur de template.
Disons que le moteur de template permet de separer le code de la vue pour les debutants qui ont besoin qu'on leur impose des bornes...

Publié par arthur dans java

essaye avec une while, cela devrais marcher. mais après je ne sais pas comment paramétrer. c'est toi qui voit