0Pricing
Java Academy · Leçon

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, Statement et ResultSet — 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 finally n'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 Connection dans un bloc try avec ressources.
  • Créez un Statement (ou, mieux encore, un PreparedStatement).
  • Appelez executeQuery et parcourez les résultats avec rs.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.getConnection ouvre une Connection.
  • Statement envoie du SQL ; executeQuery renvoie un ResultSet, et executeUpdate renvoie 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 SQLException avec 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

  1. Fondamentaux de JDBC
  2. PreparedStatement
  3. Transactions
  4. Mise en commun des connexions avec HikariCP
← Retour à Java Academy