0% ont trouvé ce document utile (0 vote)
5 vues8 pages

? JDBC Code

Le document présente les concepts clés de JDBC, une API Java pour se connecter à des bases de données relationnelles. Il décrit les types de pilotes JDBC, les interfaces principales, et fournit des exemples de code pour établir des connexions, exécuter des requêtes et gérer les erreurs. Enfin, il aborde des questions fréquentes et résume les informations essentielles à retenir pour une présentation orale.

Transféré par

Imane Imane
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues8 pages

? JDBC Code

Le document présente les concepts clés de JDBC, une API Java pour se connecter à des bases de données relationnelles. Il décrit les types de pilotes JDBC, les interfaces principales, et fournit des exemples de code pour établir des connexions, exécuter des requêtes et gérer les erreurs. Enfin, il aborde des questions fréquentes et résume les informations essentielles à retenir pour une présentation orale.

Transféré par

Imane Imane
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

📌 PARTIE 1 : LES GRANDS CONCEPTS (à dire à l'oral)

1. Qu'est-ce que JDBC ?

Ce que tu dois dire

"JDBC est une API Java qui permet de connecter une application à une base de données relationnelle. Elle fait pa
Java SE, donc pas besoin d'installer des bibliothèques supplémentaires. L'intérêt est que mon application peut
communiquer avec n'importe quelle base (MySQL, Oracle, SQL Server) sans changer le code, il suffit de changer l
driver."

Pour toi : JDBC = le pont entre ton code Java et MySQL.

2. Les 4 types de pilotes JDBC

Type Nom Ce que tu dois dire

Type
JDBC-ODBC "C'est un pont vers ODBC. Plus utilisé, peu performant."
1

Type "Utilise des librairies natives du SGBDR. Performant mais dépendant


Pilote natif
2 système."

Type Pilote pur Java pour serveur


"Passe par un serveur intermédiaire. Flexible mais complexe."
3 intermédiaire

Type "LE PLUS UTILISÉ. Écrit en Java, communique directement avec la bas
Pilote pur Java direct
4 utilisant son protocole. Pas d'intermédiaire, donc plus rapide."

Pour toi : Tu utilises le type 4 avec [Link].

3. Les interfaces principales

Interface Rôle Ce que tu dois dire

Gère les pilotes et crée les "C'est le gestionnaire de drivers. Il trouve le bon pilot
DriverManager
connexions crée la connexion."
Interface Rôle Ce que tu dois dire

"Alternative plus performante. Gère un pool de conne


DataSource Pool de connexions
réutilisables."

"Représente la session avec la base. Permet d'exécute


Connection Connexion à la base
requêtes."

Statement Requête sans paramètres "Pour les requêtes SQL fixes, sans parties variables."

"Pour les requêtes avec paramètres. PROTÈGE CONTR


PreparedStatement Requête paramétrée
INJECTIONS SQL."

CallableStatement Procédure stockée "Pour exécuter des procédures stockées dans la base.

"Contient les lignes retournées par un SELECT. Un cur


ResultSet Résultat d'une requête
qu'on parcourt avec next()."

📌 PARTIE 2 : POUR CHAQUE CODE - CE QUE TU DOIS DIRE À L'ORAL

🔷 CODE 1 : TestConnexionJDBC (Connexion simple)


java

[Link](new [Link]());

Connection cnx = [Link](url, "mysqluser", "");

Ce que tu dois dire à l'oral

"Ce code établit une connexion directe à MySQL. D'abord, j'enregistre le driver MySQL dans DriverManager. Ensu
j'appelle getConnection avec l'URL, l'utilisateur et le mot de passe. Si tout va bien, j'obtiens un objet Connection
actif. L'intérêt est la simplicité. Mais l'inconvénient est qu'à chaque appel, je crée une nouvelle connexion physiq
qui est lent pour une application web très sollicitée."

Pour toi : Simple pour tester mais pas pour la production.

🔷 CODE 2 : TestConnexionPool (Avec DataSource)


java
@Resource(name = "jdbc/pool_demo_jakarta")

DataSource dataSource;

connection = [Link]();

Ce que tu dois dire à l'oral

"Ici j'utilise un pool de connexions. L'annotation @Resource demande à GlassFish d'injecter automatiquement la
DataSource configurée dans le serveur. Ensuite, getConnection() puise une connexion du pool au lieu d'en créer u
nouvelle. L'intérêt est la performance : les connexions sont réutilisées, pas recréées à chaque fois. En plus, le poo
le nombre de connexions simultanées pour ne pas saturer la base. La différence clé : avec DriverManager, close()
vraiment la connexion ; avec DataSource, close() retourne juste la connexion au pool."

Pour toi : C'est la méthode PRO à utiliser en production.

🔷 CODE 3 : TestStatementExecuteQuery (SELECT avec Statement)


java

Statement stmt = [Link]();

ResultSet rs = [Link]("SELECT * FROM clients");

while ([Link]()) {

String nom = [Link]("nom");

Ce que tu dois dire à l'oral

"Ce code exécute une requête SELECT. executeQuery() est spécifique aux SELECT et retourne un ResultSet. next()
le curseur ligne par ligne. Tant que next() retourne true, je peux lire les colonnes avec getString, getInt, etc. L'inté
Statement est sa simplicité pour les requêtes fixes sans paramètres. Mais attention : ne JAMAIS l'utiliser avec des
données saisies par l'utilisateur à cause des risques d'injection SQL."

Pour toi : Utile pour les requêtes statiques (ex: listes déroulantes fixes).

🔷 CODE 4 : TestStatementExecuteUpdate (UPDATE avec Statement)


java

int nb = [Link]("UPDATE clients SET nom = UPPER(nom) WHERE id = 1");


Ce que tu dois dire à l'oral

"executeUpdate() est pour les requêtes INSERT, UPDATE, DELETE. Elle retourne le nombre de lignes affectées. Ici
ligne existe, elle retourne 1, sinon 0. L'intérêt est de savoir si l'opération a réussi et combien de lignes ont été mo
C'est utile pour confirmer à l'utilisateur que son action a bien été prise en compte."

Pour toi : Savoir combien de lignes ont été modifiées = feedback utilisateur.

🔷 CODE 5 : TestStatementExecute (Méthode générique)


java

boolean estResultSet = [Link](sql);

if (estResultSet) {

ResultSet rs = [Link]();

} else {

int nb = [Link]();

Ce que tu dois dire à l'oral

"execute() est la méthode générique qui peut exécuter n'importe quel type de requête. Elle retourne true si le pr
résultat est un ResultSet (SELECT), false sinon. Ensuite, j'utilise getResultSet() ou getUpdateCount() selon le
cas. L'intérêt est de pouvoir traiter des requêtes dont je ne connais pas le type à l'avance, par exemple quand
l'utilisateur saisit lui-même la requête."

Pour toi : Utile pour les outils d'administration de base de données.

🔷 CODE 6 : TestPreparedStatementExecuteUpdate (INSERT sécurisé)


java

String sql = "INSERT INTO clients (nom, prenom) VALUES (?, ?)";

PreparedStatement pstmt = [Link](sql);

[Link](1, "Dupont");

[Link](2, "Jean");

[Link]();
Ce que tu dois dire à l'oral

"C'EST LE PLUS IMPORTANT. PreparedStatement protège contre les injections SQL. Les '?' sont des paramètres. s
remplace le premier '?' par la valeur. Pourquoi c'est sécurisé ? Parce que les valeurs sont traitées comme des don
pas comme du code SQL. Si un utilisateur malveillant tape 'OR 1=1', il sera échappé et deviendra une simple
chaîne. L'intérêt en plus : la requête est précompilée une seule fois, donc plus rapide pour les exécutions répétée

Pour toi : TOUJOURS utiliser PreparedStatement quand il y a des données utilisateur.

🔷 CODE 7 : TestLectureResultSet (Lecture des données)


java

while ([Link]()) {

int id = [Link]("identifiant");

String nom = [Link]("nom");

Ce que tu dois dire à l'oral

"Le ResultSet est comme un curseur positionné avant la première ligne. next() avance d'une ligne et retourne tru
une ligne. Je peux lire les colonnes de deux façons : par nom de colonne (plus lisible) ou par index (plus
rapide). Attention : il faut gérer le cas où la colonne peut être NULL avec wasNull(). L'intérêt est que je peux trans
les données SQL en objets Java."

Pour toi : Convertir les lignes SQL en objets Java (List<Client>).

🔷 CODE 8 : TestSQLException (Gestion des erreurs)


java

catch (SQLException e) {

[Link](); // Message lisible

[Link](); // Code MySQL (ex: 1452)

[Link](); // Code standard SQL

}
Ce que tu dois dire à l'oral

"SQLException est l'exception mère pour toutes les erreurs de base de données. getMessage() donne le texte de
l'erreur. getErrorCode() donne un code spécifique au SGBDR, par exemple 1452 pour une violation de clé étrangè
MySQL. getSQLState() donne un code standard XOPEN. L'intérêt est de pouvoir identifier précisément l'erreur po
afficher un message approprié à l'utilisateur."

Pour toi : Adapter le message selon l'erreur (ex: "Ce client n'existe pas").

🔷 CODE 9 : TestSQLWarning (Avertissements non bloquants)


java

SQLWarning warning = [Link]();

while (warning != null) {

[Link]();

warning = [Link]();

Ce que tu dois dire à l'oral

"SQLWarning est différent de SQLException : ce n'est pas une erreur bloquante. L'opération a réussi mais avec un
problème mineur. Par exemple, quand j'insère une chaîne trop longue, MySQL la tronque et crée un
warning. getWarnings() récupère les warnings. getNextWarning() permet de parcourir la chaîne de
warnings. L'intérêt est d'être informé des problèmes mineurs sans interrompre l'exécution."

Pour toi : Détecter les problèmes silencieux (troncature, arrondi...).

📌 PARTIE 3 : SCHÉMA À DESSINER AU TABLEAU (si le prof demande)


text

Application Java

JDBC API (interfaces)

Driver JDBC (type 4)


Base de données (MySQL)

Explique :
"JDBC est une couche d'abstraction. Mon code Java utilise uniquement les interfaces JDBC.
Le driver, fourni par le fabricant de la base, implémente ces interfaces et communique avec
la base en utilisant son protocole spécifique."

📌 PARTIE 4 : TABLEAU RÉCAPITULATIF POUR L'ORAL

Concept Ce que tu dis en 1 phrase

JDBC "API Java pour se connecter aux bases de données."

Driver "Pont entre Java et la base, fourni par le fabricant."

Connection "Session avec la base de données."

Statement "Exécute des requêtes fixes."

PreparedStatement "Exécute des requêtes paramétrées, SÉCURISÉ."

ResultSet "Curseur sur les résultats d'un SELECT."

executeQuery() "Pour SELECT, retourne ResultSet."

executeUpdate() "Pour INSERT/UPDATE/DELETE, retourne nb lignes."

execute() "Pour tout type, retourne boolean."

next() "Avance d'une ligne dans ResultSet."

DataSource "Pool de connexions, plus performant."

SQLException "Erreur bloquante."


Concept Ce que tu dis en 1 phrase

SQLWarning "Avertissement non bloquant."

📌 PARTIE 5 : QUESTIONS PIÈGES FRÉQUENTES À L'ORAL

Question piège Ta réponse

"Car GlassFish charge DriverManager avant de connaître l'emplacement


"Pourquoi ma connexion échoue
driver. Solution : utiliser un pool de connexions ou charger manuelleme
sur GlassFish ?"
driver avec registerDriver()."

"Quelle est la différence entre "PreparedStatement protège contre les injections SQL, précompile la re
Statement et PreparedStatement donc plus rapide pour des exécutions répétées, et gère automatiqueme
?" l'échappement des caractères spéciaux."

"Que fait close() sur une connexion "Elle ne ferme PAS physiquement. Elle retourne la connexion au pool po
issue d'un pool ?" qu'elle soit réutilisée."

"Comment récupérer la clé auto-


"Avec getGeneratedKeys() sur le PreparedStatement."
générée après un INSERT ?"

"Pourquoi utiliser execute() plutôt "Quand je ne connais pas le type de requête à l'avance, par exemple si
que executeQuery() ?" l'utilisateur saisit lui-même la requête."

Vous aimerez peut-être aussi