50 questions essentielles d'entretien JDBC et réponses d'experts (2026)

Se préparer à un entretien JDBC nécessite une compréhension approfondie de la connectivité des bases de données, du réglage des performances et des meilleures pratiques en matière de sécurité. Les 50 questions suivantes couvrent des concepts de base et des scénarios du monde réel auxquels les recruteurs donnent la priorité.
👉 Téléchargement gratuit du PDF :Questions et réponses pour l'entretien JDBC
1) Qu'est-ce que JDBC et pourquoi est-il important dans les applications Java ?
JDBC (Java Database Connectivity) est l'API principale qui permet aux programmes Java d'interagir avec les bases de données relationnelles. Il standardise l'exécution SQL, la gestion des résultats et le contrôle des transactions, permettant aux développeurs d'écrire du code indépendant des bases de données qui peut basculer entre MySQL, Oracle, PostgreSQL et autres avec un minimum de modifications.
2) Quels sont les quatre types de pilotes JDBC et leurs principales différences ?
- Type 1 (pont JDBC‑ODBC) :relie JDBC à ODBC ; facile à utiliser mais nécessite ODBC et est lent.
- Type 2 (API native) :Appelle les bibliothèques de base de données natives ; plus rapide que le Type 1, mais dépendant de la plate-forme.
- Type 3 (protocole réseau) :utilise un middleware pour traduire les appels ; indépendant de la base de données, mais ajoute une surcharge réseau.
- Type 4 (pilote fin) :Pure Java, communique directement avec DB; performances et portabilité les plus élevées. La plupart des applications modernes utilisent Type4.
3) Décrire le cycle de vie d'un programme JDBC.
- Chargez le pilote :
Class.forName("com.mysql.cj.jdbc.Driver") - Établir un
ConnectionviaDriverManagerou unDataSource. - Créer un
Statement,PreparedStatement, ouCallableStatement. - Exécuter le SQL (requête, mise à jour ou procédure).
- Traiter le
ResultSetle cas échéant. - Fermez toutes les ressources (préférez
try‑with‑resources).
4) Quand devez-vous utiliser Statement, PreparedStatement ou CallableStatement ?
- Déclaration :SQL statique ; rapide pour les requêtes ponctuelles.
- Déclaration préparée :Requêtes paramétrées; protège contre l'injection SQL et améliore les performances grâce à la précompilation.
- CallableStatement :Procédures ou fonctions stockées ; encapsule une logique de base de données complexe.
5) Comment gérez-vous les transactions dans JDBC ?
- Désactiver la validation automatique :
conn.setAutoCommit(false) - Exécuter plusieurs instructions.
- En cas de réussite,
conn.commit(); en cas d'échec,conn.rollback().
Utilisez ce modèle pour les opérations atomiques telles que les transferts de fonds.
6) Quels sont les avantages et les inconvénients du pooling de connexions JDBC ?
- Avantages :Réutilise les connexions, réduit la latence et évolue sous charge.
- Inconvénients :Nécessite une configuration minutieuse ; des connexions obsolètes peuvent se produire si elles ne sont pas actualisées.
Les frameworks comme HikariCP et Apache DBCP sont des standards de l'industrie.
7) Distinguer exécuter(), exécuterQuery() et exécuterUpdate().
execute():N'importe quel SQL ; renvoiebooleanindiquant si unResultSetest produit.executeQuery():instructions SELECT ; renvoie unResultSet.executeUpdate():INSÉRER, METTRE À JOUR, SUPPRIMER ; renvoie le nombre de lignes affectées.
8) Quelles stratégies améliorent les performances de JDBC ?
- Utilisez
PreparedStatementpour la précompilation. - Mises à jour par lots via
addBatch()/executeBatch(). - Regroupement de connexions.
- Sélectionnez uniquement les colonnes nécessaires.
- Fermez les ressources rapidement.
9) Expliquer les mises à jour par lots dans JDBC.
PreparedStatement ps = conn.prepareStatement("INSERT INTO student VALUES(?,?)");
for(int i=1;i<=1000;i++){
ps.setInt(1,i);
ps.setString(2,"Name"+i);
ps.addBatch();
}
ps.executeBatch(); Réduit les allers-retours et augmente le débit.
10) Quel rôle joue ResultSet ?
ResultSet contient les résultats de la requête. Il peut être avancé uniquement, défilable ou mis à jour en fonction des indicateurs de création.
11) Comparez JDBC et ODBC.
- JDBC :Java pur, indépendant de la plate-forme, hautes performances.
- ODBC :basé sur C, dépendant de la plate-forme, nécessite des pilotes natifs.
12) Identifiez les composants de l'architecture JDBC.
- API JDBC (connexion, instruction, ResultSet).
- Gestionnaire de pilotes (enregistre les pilotes).
- Implémentations de pilotes (types 1 à 4).
- Backend de base de données.
13) Expliquez ResultSetMetaData par rapport à DatabaseMetaData.
- ResultSetMetaData :Noms de colonnes, types d'une requête spécifique.
- Base de donnéesMetaData :Nom du pilote, produit de base de données, fonctionnalités SQL prises en charge.
14) Comment utiliser les points de sauvegarde ?
conn.setAutoCommit(false);
Savepoint sp = conn.setSavepoint("sp1");
// operations
conn.rollback(sp); // partial rollback
conn.commit(); 15) Définir RowSet et ses variantes.
- JdbcRowSet – connecté.
- CachedRowSet – déconnecté, sérialisable.
- WebRowSet – basé sur XML.
- FilteredRowSet – affichage avec filtres.
- JoinRowSet :fusionne plusieurs RowSets.
16) Comment JDBC gère-t-il les exceptions SQL ?
SQLException fournit getErrorCode() , getSQLState() , et getMessage() . Connectez-vous toujours et revenez en arrière en cas d'échec.
17) Qu'est-ce que le traitement par lots ?
Regroupez plusieurs instructions DML en un seul aller-retour ; utilisez addBatch() et executeBatch() .
18) Répertoriez à nouveau les types d'instructions.
- Instruction – SQL statique.
- PreparedStatement – paramétré.
- CallableStatement – procédures stockées.
19) Gestion efficace des connexions.
Préférez DataSource avec mutualisation des connexions. Utilisez try‑with‑resources pour un nettoyage automatique.
20) Déclaration JDBC par rapport à la session Hibernate.
- JDBC :mappage manuel de bas niveau.
- Hibernate :ORM, mise en cache, génération SQL automatique.
21) Récupérer les clés générées automatiquement.
PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); ps.executeUpdate(); ResultSet rs = ps.getGeneratedKeys();
22) Gestion des BLOB et CLOB.
- BLOB – flux binaires.
- CLOB – flux de caractères.
23) Rendre ResultSet défilant/mis à jour.
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEE");
rs.absolute(3);
rs.updateString("name", "UpdatedName");
rs.updateRow(); 24) DataSource contre DriverManager.
- DriverManager – simple, pas de pooling.
- DataSource – Recherche JNDI, pooling, prise en charge XA.
25) Traitement par lots avec PreparedStatement.
for(int i=1;i<=5;i++){
ps.setInt(1,i);
ps.setString(2,"Student"+i);
ps.addBatch();
}
ps.executeBatch(); 26) Utilisation de DatabaseMetaData.
DatabaseMetaData dbmd = conn.getMetaData();
System.out.println("DB: " + dbmd.getDatabaseProductName()); 27) Récapitulatif des variantes d'exécution.
- execute() – booléen.
- executeQuery() – ResultSet.
- executeUpdate() – int.
28) Fermeture des ressources JDBC.
try (Connection c = ds.getConnection();
Statement s = c.createStatement();
ResultSet rs = s.executeQuery("SELECT * FROM EMPLOYEE")) {
while(rs.next()){ /* process */ }
} 29) Optimisations courantes des performances.
- Regroupement de connexions.
- PreparedStatement sur Statement.
- Mises à jour par lots.
- Récupérer le réglage de la taille.
- Récupération sélective des colonnes.
30) Appel de procédures stockées.
CallableStatement cs = conn.prepareCall("{call getEmployeeSalary(?)}");
cs.setInt(1,101);
ResultSet rs = cs.executeQuery(); 31) Éléments internes du regroupement de connexions JDBC.
Au démarrage, un pool crée un ensemble fixe de connexions. Les requêtes empruntent une connexion ; le renvoie après utilisation, en gardant les ressources en mémoire.
32) Configurez HikariCP.
HikariConfig cfg = new HikariConfig();
cfg.setJdbcUrl("jdbc:mysql://localhost:3306/testdb");
cfg.setUsername("root");
cfg.setPassword("pw");
cfg.setMaximumPoolSize(10);
HikariDataSource ds = new HikariDataSource(cfg); 33) DriverManager contre DataSource.
- DriverManager – direct, pas de pooling.
- DataSource – regroupé, XA, JNDI.
34) Causes courantes « Aucun pilote approprié trouvé ».
- JAR du pilote manquant dans le chemin de classe.
- URL JDBC incorrecte.
Class.forName()manquant (avant Java9).- Incompatibilité de version entre pilote et base de données.
35) Empêcher l'injection SQL.
- Toujours utiliser
PreparedStatementavec des paramètres. - Valider et nettoyer les entrées utilisateur.
- Limiter les privilèges de base de données.
36) JDBC contre ORM (Hibernate).
- JDBC :contrôle précis, mappage manuel, légèreté.
- Hibernate :ORM automatique, mise en cache, courbe d'apprentissage plus élevée.
37) Journalisation des requêtes SQL.
- Activer la journalisation des pilotes (par exemple, le
logger=com.mysql.cj.log.StandardLoggerde MySQL ). - Utilisez P6Spy ou datasource‑proxy pour intercepter et enregistrer.
38) Multithreading sécurisé avec JDBC.
- Ne pas partager
Connectionobjets à travers les threads. - Emprunter une connexion à un pool par thread.
- Fermez les ressources avec try-with-resources.
39) JDBC dans Spring / Spring Boot.
Le JdbcTemplate du printemps gère automatiquement le passe-partout, la traduction des exceptions et le regroupement de connexions.
40) États de connexion JDBC.
- Initialisé → Ouvert → En transaction → Validé/Annulé → Fermé.
41) Récapitulatif des types de pilotes.
- Type 1 :faibles performances, nécessite ODBC.
- Type 2 :natif, performances moyennes.
- Type 3 :middleware, performances modérées.
- Type4 :Java pur, performances les plus élevées.
42) Niveaux d'isolement des transactions.
- READ_UNCOMMITTED – lectures incorrectes.
- READ_COMMITTED – par défaut, empêche les lectures incorrectes.
- REPEATABLE_READ :empêche les lectures non répétables.
- SÉRIALISABLE – isolation stricte, évite les lectures fantômes.
43) Transactions distribuées (XA).
- Utilisez
javax.sql.XADataSourceet un responsable JTA (Atomikos, Bitronix, Spring). - La validation en deux phases coordonne les validations sur plusieurs bases de données.
44) Profilage des performances JDBC.
- P6Spy, proxy de source de données pour la journalisation des requêtes.
- Java Flight Recorder/JVisualVM pour l'utilisation de la connexion.
- La base de données EXPLAIN planifie le réglage des requêtes.
- Prometheus + Grafana pour les métriques.
45) Prévention des fuites de mémoire JDBC.
- Toujours fermer
ResultSet,Statement,Connectionvia essayer avec les ressources. - Configurer les délais d'expiration du pool (maxIdleTime, maxLifetime).
- Évitez de conserver les ResultSets au-delà de la portée.
46) JDBC pour microservices/cloud.
- HikariCP pour un pooling léger.
- Sessions JDBC sans état.
- Lire les réplicas, mise en cache (Redis).
- Disjoncteurs Resilience4j pour le basculement de base de données.
47) Gestion gracieuse des échecs de connexion.
for(int i=0;i<3;i++){
try(Connection c=ds.getConnection()){ break; }
catch(SQLTransientConnectionException e){ Thread.sleep(1000*(i+1)); }
} 48) Différences de validation, de restauration et de point de sauvegarde.
- S'engager – finalise toutes les modifications.
- Restaurer – revient au dernier commit.
- Point de sauvegarde – objectif de restauration partielle.
49) Utilité des métadonnées JDBC.
- Introspection dynamique des schémas.
- Vérifications des capacités de la base de données.
- Outils pour la génération ORM.
50) Bonnes pratiques pour JDBC d'entreprise.
- Utilisez
DataSourceavec mutualisation. - Préférer
PreparedStatement. - Gérez les transactions avec une isolation appropriée.
- Opérations par lots et pagination.
- Enregistrer et surveiller les requêtes.
- Gérez efficacement les exceptions et les tentatives.
🔍 Principales questions d'entretien JDBC avec des scénarios du monde réel et des réponses stratégiques
Vous trouverez ci-dessous 10 questions d'entretien JDBC soigneusement élaborées, avec ce que les enquêteurs attendent et des exemples de réponses solides.
1) Qu'est-ce que JDBC et pourquoi est-il important ?
Réponse attendue : JDBC est l'API Java pour l'accès aux bases de données ; il résume l'exécution SQL, la gestion des résultats et les transactions, permettant ainsi un code indépendant de la base de données.
2) Expliquer les types de pilotes JDBC.
Réponse attendue : Quatre types :pont JDBC‑ODBC, API native, protocole réseau, pilote léger. Le type 4 est le plus courant aujourd'hui.
3) Comment gérer efficacement les connexions ?
Réponse attendue : Utilisez des pools de connexions comme HikariCP ; évitez d'ouvrir/fermer des connexions par demande.
4) Instruction Distinguer, PreparedStatement et CallableStatement.
Réponse attendue : Instruction – SQL statique ; PreparedStatement – paramétré, empêche l'injection ; CallableStatement – procédures stockées.
5) Décrivez une optimisation des performances JDBC que vous avez effectuée.
Réponse attendue : Remplacement de la concaténation de chaînes par PreparedStatement, introduction du pooling et utilisation des insertions par lots ; temps de réponse réduit de 40 %.
6) Comment empêcher l'injection SQL ?
Réponse attendue : Utilisez PreparedStatement ; valider la saisie ; limiter les privilèges de la base de données.
7) Résoudre un échec de connexion JDBC.
Réponse attendue : Vérifiez l'URL, les informations d'identification, le réseau, le fichier jar du pilote ; examiner les journaux ; Corrigez le port mal configuré.
8) Gérer les transactions dans JDBC.
Réponse attendue : Désactivez la validation automatique, effectuez des opérations, validez ou annulez en fonction du résultat ; garantit la conformité ACID.
9) Résolvez un problème de base de données difficile avec JDBC.
Réponse attendue : Implémentation du traitement par lots pour les insertions en vrac, réduisant le temps de quelques minutes à quelques secondes.
10) Donner la priorité aux améliorations de JDBC dans des délais serrés.
Réponse attendue : Évaluez l'impact, communiquez clairement, abordez d'abord les éléments à fort impact, collaborez pour respecter les SLA.
Java
- Exemple For-Each :boucle for améliorée pour itérer le tableau Java
- Comment convertir facilement une chaîne en entier en JAVA
- Interface Java ListIterator
- Classe Java FileWriter
- Méthode Java String endsWith () avec exemple
- Java - Opérateurs de base
- Java Hello World :comment écrire votre premier programme Java avec un exemple
- Classe de lecteur Java
- Java 8 - Classe facultative