Skip Navigation Links
Accueil
Java Standard EditionExpand Java Standard Edition
Java EE 5Expand Java EE 5
Visual Basic .Net 2005Expand Visual Basic .Net 2005
Visual C++ .Net 2005Expand Visual C++ .Net 2005
Visual C# .Net 2005Expand Visual C# .Net 2005
Cours ASP .Net 2.0Expand Cours ASP .Net 2.0
PostgresqlExpand Postgresql
LinuxExpand Linux
Visual Studio 2008Expand Visual Studio 2008
ASP 3.0 ClassiqueExpand ASP 3.0 Classique
Cours Javascript - DOM - DHTMLExpand Cours Javascript - DOM - DHTML
Cours AjaxExpand Cours Ajax
VBAExpand VBA
AssembleurExpand Assembleur
PerlExpand Perl
MembresExpand Membres
L'auteur du site
Nouveautés sur le site
Contacts
Plan du site
Accueil > Java Standard Edition > Les bases de données en Java
____________________________________________________________________________________________________
Connexion

LES BASES DE DONNEES EN JAVA

Nous prendrons un exemple simple de couche d'accès aux données(DAL = Data Access Layer, qui signifie couche d'accès aux données), pour faire comprendre comment utiliser JDBC. Les citations seront donc des exemples tirés de cette DAL. La couche d'accès aux données, c'est simplement une couche contenant des outils pour accéder facilement à la base de données.

L'ensemble des sources de la DAL sera fournit à la fin.

Le serveur MySQL utilisé ici est MySQL 5.0, et a été installé en même temps que WAMP.

MySQL fournit un pilote JDBC, qui peut être téléchargé à l'adresse http://dev.mysql.com/downloads/connector
Le téléchargement se fait sous la forme d'un zip, par exemple mysql-connector-java-5.1.5.zip
Décompresser ce zip vous crée un répertoire, dans lequel se trouve mysql-connector-java-5.1.5-bin.jar, qui est le jar à ajouter à vos applications pour bénéficier du pilote JDBC/MySQL.
Pour ajouter ce jar à votre projet, clic droit sur votre projet dans le project explorer de Eclipse -> properties -> Java Build Path -> Add External Jars.

I) A propos de la couche d'accès aux données fournie en exemple

La classe importante est la classe communDAL.java . C'est elle qui constitue le plus bas niveau de la DAL. Notre couche d'accès aux données peut aussi être constitué de classes qui héritent de la classe communDAL, comme la classe clients.java .

I.a) La classe communDAL

Cette classe peut être utilisée de deux manières. Car j'ai voulu montrer différentes façons de procéder. On utilise la classe communDAL soit en singleton, soit en classe mère d'une classe métier(comme la classe clients, qui hérite de la classe communDAL).

I.a.1) L'utilisation de la classe communDAL en singleton

La classe communDal peut être instanciée en singleton.
Utilisée en singleton, cette classe(une fois instanciée) représente une couche DAL( uniquement la partie commune de la couche DAL, c'est à dire les méthodes de bas niveau, et les attributs généraux).
La classe communDAL possède donc une implémentation du design pattern singleton, qui d'ailleurs peut être soit un singleton simple, soit un singleton multithread.
Il suffit de décommenter la méthode getInstance gérée en multithreading, et de commenter celle monothread, pour avoir un singleton multithreading. On peut mettre le constructeur en private au lieu de protected, lors d'une utilisation de la classe mère en singleton(c'est notre cas ici).

I.a.2) L'utilisation de la classe communDAL en classe mère d'une classe métier

La deuxième façon d'utiliser notre classe communDAL est de l'utiliser en classe mère d'une classe métier, par exemple comme l'exemple de la classe clients, qui hérite de communDAL.

Cette classe fournit une classe mère pour les objets métiers, et leur fournit les méthodes de base d'accès à la base de données, ainsi que les attributs de bases. Tous ces membres étant commun à tous les objets métiers, il était intéressant de les mettre dans une classe mère. La méthode getInstance( ainsi que l'attribut privé instance) ne doit pas être utilisé dans le cas d'une utilisation en classe mère de CommunDAL.

II) La connexion à la base de données

/**

       * Méthode de connection à la base de donnée.

       * Utilise les attributs: ip, port, bdd, login, mdp.

       * @throws ClassNotFoundException

       * @throws SQLException

       */

      public void connect() throws ClassNotFoundException, SQLException

      {

            String url = "jdbc:mysql://"+ this.ip + ":" + this.port + "/" + this.bdd;

 

            Class.forName("com.mysql.jdbc.Driver"); //uniquement

                  //pour exécuter le static initializer!

            //

            CommunDAL.conn = (com.mysql.jdbc.Connection)DriverManager.getConnection(url, this.login, this.mdp);

 

      }

II.a) Le Class.forName("nom de la classe Driver")

La classe "Class"(java.lang.Class) est une classe qui sert à faire des objets qui représentent une classe!
C'est l'équivalent de la classe "Type" du framework .net.

La méthode forName est une méthode statique de la classe "Class", qui sert à construire un objet de type "Class", qui représente la classe dont le nom est donné en paramètre.

Revenons à notre appel à nous:
Class.forName("com.mysql.jdbc.Driver");
On remarque qu'on ne récupère pas l'objet retourné par la méthode forName, alors que c'est normalement le but de la méthode forName! On en conclut qu'on effectue cet appel à la méthode forName dans un autre but, il s'agit par conséquent d'une astuce. En réalité, la classe "Driver" (com.mysql.jdbc.Driver) contient ce qu'on appelle un static initializer.

La classe Driver(com.mysql.jdbc.Driver) représente un driver, et plus précisément un driver de base de données MySQL.

Regardons le code source de la classe Driver de MySql:

/*

 Copyright (C) 2002-2004 MySQL AB

 

 This program is free software; you can redistribute it and/or modify

 it under the terms of version 2 of the GNU General Public License as

 published by the Free Software Foundation.

 

 There are special exceptions to the terms and conditions of the GPL

 as it is applied to this software. View the full text of the

 exception in file EXCEPTIONS-CONNECTOR-J in the directory of this

 software distribution.

 

 This program is distributed in the hope that it will be useful,

 but WITHOUT ANY WARRANTY; without even the implied warranty of

 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

 GNU General Public License for more details.

 

 You should have received a copy of the GNU General Public License

 along with this program; if not, write to the Free Software

 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

 

 

 

 */

package com.mysql.jdbc;

 

import java.sql.SQLException;

 

/**

 * The Java SQL framework allows for multiple database drivers. Each driver

 * should supply a class that implements the Driver interface

 *

 * <p>

 * The DriverManager will try to load as many drivers as it can find and then

 * for any given connection request, it will ask each driver in turn to try to

 * connect to the target URL.

 *

 * <p>

 * It is strongly recommended that each Driver class should be small and

 * standalone so that the Driver class can be loaded and queried without

 * bringing in vast quantities of supporting code.

 *

 * <p>

 * When a Driver class is loaded, it should create an instance of itself and

 * register it with the DriverManager. This means that a user can load and

 * register a driver by doing Class.forName("foo.bah.Driver")

 *

 * @see org.gjt.mm.mysql.Connection

 * @see java.sql.Driver

 * @author Mark Matthews

 * @version $Id: Driver.java 3726 2005-05-19 15:52:24Z mmatthews $

 */

public