Fondamentaux de JDBC
Connexions, instructions et ensembles de résultats
Fondamentaux de JDBC est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que JDBC ?
JDBC (connectivité Java aux bases de données) est l'API standard permettant de communiquer avec des bases de données relationnelles depuis Java.
- Elle se trouve dans le paquet
java.sql. - Chaque base de données fournit un pilote qui implémente les interfaces JDBC.
- Vous écrivez du code utilisant des interfaces comme
Connection,StatementetResultSet— jamais directement les classes du fournisseur.
Cette abstraction permet au même code de fonctionner avec PostgreSQL, MySQL, H2 ou Oracle.
Les interfaces principales
Trois interfaces accomplissent l'essentiel du travail :
Connection— une session ouverte avec la base de données.Statement/PreparedStatement— envoie du SQL.ResultSet— un curseur parcourant les lignes renvoyées par une requête.
Vous obtenez une Connection auprès de DriverManager ou d'une DataSource.
Ouvrir une connexion
DriverManager.getConnection(url, user, password) renvoie une Connection active.
L'URL JDBC identifie la base de données, par exemple jdbc:postgresql://localhost:5432/shop. Les pilotes modernes s'enregistrent automatiquement ; vous n'appelez donc plus Class.forName(...).
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Main {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/shop";
try (Connection conn = DriverManager.getConnection(url, "app", "secret")) {
System.out.println("Connected: " + !conn.isClosed());
} catch (SQLException e) {
System.out.println("Connection failed: " + e.getMessage());
}
}
}try avec ressources
Connection, Statement et ResultSet implémentent tous AutoCloseable.
Ouvrez-les toujours dans un bloc try avec ressources afin qu'ils se ferment automatiquement — même lorsqu'une exception est levée. Les connexions qui restent ouvertes épuisent rapidement les ressources de la base de données.
- Les ressources se ferment dans l'ordre inverse.
- Aucun bloc
finallyn'est nécessaire.
Exécuter une requête
Pour une requête SELECT simple, créez un Statement et appelez executeQuery, qui renvoie un ResultSet.
L'exemple utilise une simulation en mémoire afin que vous puissiez observer le déroulement sans base de données réelle. En production, le SQL s'exécuterait sur la connexion.
import java.util.List;
public class Main {
public static void main(String[] args) {
// Simulated result of: SELECT name FROM users
List<String> names = List.of("Ada", "Linus", "Grace");
System.out.println("Query returned " + names.size() + " rows:");
for (String name : names) {
System.out.println(" - " + name);
}
}
}Lire un ResultSet
Un ResultSet commence avant la première ligne. Appelez rs.next() dans une boucle ; il renvoie false lorsqu'il n'y a plus de lignes.
Lisez les colonnes par leur nom ou par un index commençant à 1 à l'aide d'accesseurs typés :
rs.getInt("id")rs.getString("name")rs.getDouble("price")
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/shop";
try (Connection conn = DriverManager.getConnection(url, "app", "secret");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT id, name FROM users")) {
while (rs.next()) {
System.out.println(rs.getInt("id") + ": " + rs.getString("name"));
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}executeUpdate pour les écritures
Pour INSERT, UPDATE et DELETE, utilisez executeUpdate. Cette méthode renvoie un int : le nombre de lignes affectées.
Utilisez execute uniquement lorsque vous ne savez pas à l'avance si l'instruction renvoie un ensemble de résultats.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/shop";
try (Connection conn = DriverManager.getConnection(url, "app", "secret");
Statement st = conn.createStatement()) {
int rows = st.executeUpdate("DELETE FROM sessions WHERE expired = true");
System.out.println("Deleted " + rows + " rows");
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}Associer les lignes à des objets
La plupart des applications convertissent chaque ligne en objet du domaine. Parcourez le ResultSet et construisez des instances.
Voici le modèle, simulé afin de pouvoir être exécuté de manière autonome. Un record rend l'association concise.
import java.util.ArrayList;
import java.util.List;
public class Main {
record User(int id, String name) {}
public static void main(String[] args) {
// Stand-in for iterating a ResultSet
String[][] rows = {{"1", "Ada"}, {"2", "Linus"}};
List<User> users = new ArrayList<>();
for (String[] row : rows) {
users.add(new User(Integer.parseInt(row[0]), row[1]));
}
users.forEach(System.out::println);
}
}Gérer SQLException
Presque chaque méthode JDBC lève l'exception vérifiée SQLException.
Elle contient des informations de diagnostic utiles :
getMessage()— un texte lisible par un humain.getSQLState()— le code d'état standard à 5 caractères.getErrorCode()— le code spécifique au fournisseur.
Journalisez ces informations au lieu de les ignorer.
import java.sql.SQLException;
public class Main {
public static void main(String[] args) {
SQLException e = new SQLException("duplicate key", "23505", 7);
System.out.println("Message: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("ErrorCode: " + e.getErrorCode());
}
}DatabaseMetaData
conn.getMetaData() renvoie un objet DatabaseMetaData décrivant la base de données elle-même.
Il peut vous indiquer le nom et la version du produit, les fonctionnalités prises en charge, et même répertorier les tables et les colonnes. C'est ainsi que les outils de navigation de schéma fonctionnent sans intégrer en dur les détails propres au fournisseur.
Assembler le tout
Déroulement typique d'une lecture :
- Ouvrez une
Connectiondans un bloc try avec ressources. - Créez un
Statement(ou, mieux encore, unPreparedStatement). - Appelez
executeQueryet parcourez les résultats avecrs.next(). - Associez les colonnes à des objets.
- Laissez le bloc try avec ressources tout fermer.
Dans la prochaine leçon, nous rendrons les requêtes sûres contre l'injection.
Vérification rapide
Que renvoie Statement.executeUpdate ?
Récapitulatif
Vous connaissez maintenant le fonctionnement fondamental de JDBC :
DriverManager.getConnectionouvre uneConnection.Statementenvoie du SQL ;executeQueryrenvoie unResultSet, etexecuteUpdaterenvoie le nombre de lignes affectées.- Parcourez les résultats avec
rs.next()et les accesseurs typés. - Utilisez toujours le bloc try avec ressources et gérez
SQLExceptionavec ses codes d'état et d'erreur.
Questions Fréquemment Posées
La leçon « Fondamentaux de JDBC » est-elle gratuite ?
Oui — le texte complet de « Fondamentaux de JDBC » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Fondamentaux de JDBC » ?
Connexions, instructions et ensembles de résultats Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Fondamentaux de JDBC » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Fondamentaux de JDBC
- PreparedStatement
- Transactions
- Mise en commun des connexions avec HikariCP