Mis à jour le 12/10/2018
  • 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Ce cours est en vidéo.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

Utilisez JDBC

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Ceci est la dernière partie de ce cours ! Nous allons relier notre application à une base de données SQL dans laquelle nous allons stocker nos produits.

Ce chapitre demande d'avoir de bonnes bases en gestion de bases de données SQL. Un cours est dédié à ce sujet sur OpenClassrooms.

Mettez en place la base

Dans ce chapitre, nous allons utiliser MySql. Commencez par créer une base de données homeshop. 

Jouez le script SQL suivant pour générer la table product.

--
-- Table structure for table `product`
--

DROP TABLE IF EXISTS `product`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `product` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `description` text,
  `price` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `product`
--

LOCK TABLES `product` WRITE;
/*!40000 ALTER TABLE `product` DISABLE KEYS */;
INSERT INTO `product` VALUES (1,'MARSHALL KILBURN NOIR','Lenceinte Bluetooth Marshall Kilburn est lenceinte nomade Rock n Roll par définition !',179.00),(2,'Philips\
 HD7866/61','Philips SENSEO Quadrante, Noir - 1 ou 2 tasses',79.99),(3,'TV Samsung UE49MU6292','Smart TV LED incurvée 49 pouces',599.00),(4,'BEKO TSE 1042 F','Réfri\
gérateur BEKO 130L - Classe A+ - blanc',189.00),(5,'SAMSUNG RZ32M7000WW/EF','Le congélateur Samsung RZ32M7000WW/EF blanc est doté du froid ventilé qui assure une te\
mpérature constante',649.00);
/*!40000 ALTER TABLE `product` ENABLE KEYS */;
UNLOCK TABLES;

Connectez-vous

La première chose à faire pour pouvoir se connecter à une base MySql est d'ajouter une librairie permettant de le faire facilement : mysql-connector-java/6.0.6.

Nous allons ensuite créer un nouveau package  com.cursan.homeshop.dao .

Nous allons donc créer une classe  ProductDAO. Un développeur voyant cette classe saura immédiatement qu'elle sert à récupérer des  Product  en base de données.

Nous allons ensuite ajouter une méthode  getAll .

package com.cursan.homeshop.dao;

import com.cursan.homeshop.Product;

public class ProductDAO {
    /**
     * Get all products on database
     * @return product list
     */
    public List<Product> getAll() {
        return null;
    }
}

Nous allons maintenant procéder à la connexion. On va ajouter les informations de connexion en attribut.

private String url = "jdbc:mysql://localhost/homeshop";
private String user = "root";
private String pwd = "";

On ajoute la connexion :

public List<Product> getAll() {
    try {
        Connection connection = DriverManager.getConnection(url, user, pwd);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    return null;
}

Récupérez des données

Il reste maintenant à jouer une requête  select  pour récupérer les produits en base.

public List<Product> getAll() {
    List<Product> products = new ArrayList<>();
    try {
        Connection connection = DriverManager.getConnection(url, user, pwd);
        Statement statement = connection.createStatement();
        ResultSet rs = statement.executeQuery("select * from product");
        while (rs.next()) {
            String name = rs.getString("name");
            String description = rs.getString("description");
            Double price = rs.getDouble("price");
            products.add(new Product(name, description, price));
        }
        connection.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return products;
}

La syntaxe est particulière, mais se comprend facilement :

  • Un objet de type Statement  va permettre de créer une requête.

  • Le résultat est stocké dans un objet de type ResultSet.

  • La méthode next permet de parcourir les produits récupérés.

  • Enfin les méthodes getString et getDouble permettent de récupérer les champs voulus.

On modifie  init   dans  BillServlet  :

public class BillServlet extends HttpServlet {
    List<Product> products = new ArrayList<Product>();
    @Override
    public void init() throws ServletException {
        products = new ProductDAO().getAll();
    }
    
    ...
    
}

Vous pouvez démarrer votre serveur Jetty et admirer le résultat :magicien: :

HomeShop avec une BDD
HomeShop avec une BDD

Pour aller plus loin avec JDBC, plusieurs chapitres sont disponibles sur OpenClassrooms.

Le mot de la fin

Votre apprentissage avec Java est maintenant terminé :D. Vous avez à présent toutes les armes pour comprendre les problématiques de l'univers Java. Vous êtes capable de faire face à des problématiques complexes avec les bonnes pratiques.

Il vous reste encore beaucoup de concepts à voir et à approfondir pour devenir un excellent développeur Java. C'est l'expérience qui fera de vous le meilleur !

Bon courage pour la suite.

Exemple de certificat de réussite
Exemple de certificat de réussite