Archives Wild Code School
Java Avancé

JDBC & MySQL

Quête 10 sur 15 · 1 image archivée

Grâce à ton travail acharné sur les différentes quêtes MySQL, tu es maintenant capable de créer ( et de gérer ) une base de données performante avec plein de jolies tables à l'intérieur. Mais du coup, tu as dû légitimement te poser la suivante:

  • "Pourquoi l'ornithorynque est-il classé parmi les mammifères alors qu'il pond des oeufs" ?
  • "Comment m'y prendre pour faire interagir mon application écrite en Java avec ma base de données MySQL"?

... Et bien figure-toi, jeune padawan, que cette question, beaucoup de maîtres jedi l'ont posé avant toi et quelque chose a émergé de ce questionnement, j'ai nommé JDBC pour Java DataBase Connectivity.

Objectifs

  • Apprendre à faire communiquer une application JEE avec MySQL
  • S'initier à la norme JDBC.

Explications

JDBC est une API qui fait partie intégrante de la plate-forme Java, et qui est constituée de classes permettant l'accès depuis vos applications Java à des données rangées sous forme de tables. Dans la très grande majorité des cas, il s'agira bien entendu de bases de données stockées dans un SGBD (dans ton cas MySQL) ! Les actions rendues possibles par cette API sont :

  • La connexion avec le SGBD.

  • L'envoi de requêtes SQL au SGBD depuis une application Java.

  • Le traitement des données et éventuelles erreurs retournées par le SGBD lors des différentes étapes du dialogue.

Seulement voilà, il existe plusieurs SGBD différents et bien qu'ils se basent tous sur le langage SQL, chacun a sa manière de gérer les données. L'avantage de JDBC, c'est qu'il est nativement prévu pour pouvoir s'adapter à n'importe quel SGBD !

Ce que tu veux, c'est dialoguer avec MySQL, et pour ce faire, tu dois d'abord ajouter un driver spécifique à ce dernier, que tu peux trouver ici .

 Mais il y a quoi dans ce driver ?

Un lot de fonctionnalités, codées en java et archivées ( ou compressées ) au sein d'un fichier .jar ( pour java archive ). Ces fonctionnalités respectent l'API JDBC, cela veut dire que chaque driver doit faire de même pour être considéré comme JDBC compliant.

Et comment je m'en sers ?

Tu peux placer le fichier .jar dans le dossier WEB-INF/lib/ de ton projet JEE

Et une fois le driver en place dans le dossier ... J'en fais quoi ?

Trop facile serait la quête si la réponse je te donnais jeune padawan ! Il se trouve que la documentation de MySQL n'est pas tout à fait à jour. T'aider, je vais:

Fiou c'est compliqué ton truc !

Et encore, tu n'as rien rien vu,nous n'avons pas encore parlé de DAO, ni même de JPA, et encore moins d'Hibernate ... Mais ça sera pour une autre fois, place au vrai challenge !

Challenge

Le challenge de maître Yoda

Maître Yoda se fait vieux ( 900 ans et des poussières d'étoiles ), et avec l'âge viennent souvent les problèmes de mémoire. Afin de gérer au mieux le temple Jedi, il a besoin d'une application Java lui permettant de lister l'ensemble des maîtres présents.

En t'aidant du code SQL ci-dessous et des informations récupérées plus haut, fais en sorte de:

  • Construire une base de données starwars contenant une table jedi_masters (via un outil de gestion de BDD par exemple).
  • Insère des données au sein de cette table ( elles te sont fournies mais tu peux en rajouter d'autres si tu veux - tu peux toujours utiliser un outil).
  • Puis crée une servlet dont le rôle est d'aller récupérer les informations au sein de la bdd en JDBC, et retourne les sous forme d'une liste html (en utilisant les balises ul et li ).
sql
DROP  DATABASE  IF  EXISTS  `starwars`;
CREATE  DATABASE  IF  NOT  EXISTS  `starwars`;
USE  `starwars`;

DROP  TABLE  IF  EXISTS  `jedi_masters`;
CREATE  TABLE  IF  NOT  EXISTS  `jedi_masters`(

id TINYINT  PRIMARY  KEY AUTO_INCREMENT NOT  NULL,
name  VARCHAR(50) UNIQUE NOT  NULL DEFAULT "no_name",
surname VARCHAR(50) NOT  NULL DEFAULT "no_surname"

);

INSERT INTO `jedi_masters` (`name`  , `surname`  )
            VALUES
            ("Kenobi", "Obiwan"),
            ("Windu"    , "Mace"),
            ("Skywalker"    , "Anakin");

... Et n'oublie pas

Critères de validation

  • Le code de te classe Main est disponible sur github ou via un gist.
  • Ton code JEE est facilement réutilisable et communique avec succès avec ta base de données
  • Une personne utilisant la même BDD que toi peut réutiliser ton code et afficher sa propre liste issue de sa BDD.
  • La liste est au format HTML.