Java Academy · Les

De basis van JDBC

Verbindingen, statements en resultsets

Les 1 van 413 stappen

De basis van JDBC is een gratis Java Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.

Wat is JDBC?

JDBC (Java Database Connectivity) is de standaard-API om vanuit Java met relationele databases te communiceren.

  • De API bevindt zich in het pakket java.sql.
  • Elke database levert een stuurprogramma mee dat de JDBC-interfaces implementeert.
  • Je schrijft code tegen interfaces zoals Connection, Statement en ResultSet — nooit rechtstreeks tegen de klassen van de leverancier.

Dankzij deze abstractie kan dezelfde code werken met PostgreSQL, MySQL, H2 of Oracle.

De kerninterfaces

Drie interfaces doen het meeste werk:

  • Connection — een open sessie met de database.
  • Statement / PreparedStatement — verstuurt SQL.
  • ResultSet — een cursor over de rijen die door een query worden teruggegeven.

Je verkrijgt een Connection via DriverManager of een DataSource.

Een verbinding openen

DriverManager.getConnection(url, user, password) retourneert een actieve Connection.

De JDBC-URL identificeert de database, bijvoorbeeld jdbc:postgresql://localhost:5432/shop. Moderne stuurprogramma's registreren zichzelf automatisch, dus je roept Class.forName(...) niet meer aan.

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-with-resources

Connection, Statement en ResultSet implementeren allemaal AutoCloseable.

Open ze altijd binnen een try-with-resources-blok, zodat ze automatisch worden gesloten — ook wanneer een uitzondering wordt gegenereerd. Als je verbindingen laat lekken, raakt de database snel uitgeput.

  • Hulpbronnen worden in omgekeerde volgorde gesloten.
  • Een finally-blok is niet nodig.

Een query uitvoeren

Maak voor een eenvoudige SELECT een Statement en roep executeQuery aan. Dit retourneert een ResultSet.

Het voorbeeld gebruikt een simulatie in het geheugen, zodat je de werking kunt zien zonder een echte database. In productie zou de SQL tegen de verbinding worden uitgevoerd.

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);
        }
    }
}

Een ResultSet lezen

Een ResultSet begint vóór de eerste rij. Roep rs.next() aan in een lus; de methode retourneert false wanneer er geen rijen meer zijn.

Lees kolommen op naam of met een index die bij 1 begint, met getmethoden voor het juiste type:

  • 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 voor schrijfacties

Gebruik voor INSERT, UPDATE en DELETE executeUpdate. Dit retourneert een int: het aantal gewijzigde rijen.

Gebruik execute alleen wanneer je vooraf niet weet of de instructie een resultaatset retourneert.

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());
        }
    }
}

Rijen aan objecten koppelen

De meeste toepassingen zetten elke rij om in een domeinobject. Doorloop de ResultSet en bouw instanties.

Dit is het patroon, gesimuleerd zodat het zelfstandig kan worden uitgevoerd. Met een record blijft de koppeling beknopt.

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);
    }
}

SQLException afhandelen

Bijna elke JDBC-methode werpt de gecontroleerde uitzondering SQLException.

Deze bevat nuttige diagnose-informatie:

  • getMessage() — leesbare tekst.
  • getSQLState() — de standaardstatuscode van 5 tekens.
  • getErrorCode() — de leveranciersspecifieke code.

Leg deze gegevens vast in plaats van ze te negeren.

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() retourneert een object van het type DatabaseMetaData dat de database zelf beschrijft.

Het kan je de productnaam en versie, ondersteunde functies en zelfs een lijst met tabellen en kolommen geven. Zo werken hulpmiddelen voor databaseschema's zonder details over leveranciers hard te coderen.

Alles samenvoegen

Een typische leesbewerking:

  • Open een Connection in try-with-resources.
  • Maak een Statement (of beter nog een PreparedStatement).
  • Roep executeQuery aan en doorloop het resultaat met rs.next().
  • Koppel kolommen aan objecten.
  • Laat try-with-resources alles sluiten.

In de volgende les maken we queries veilig tegen injectie.

Kennischeck

Wat retourneert Statement.executeUpdate?

Samenvatting

Je kent nu de basiswerking van JDBC:

  • DriverManager.getConnection opent een Connection.
  • Statement verstuurt SQL; executeQuery retourneert een ResultSet en executeUpdate retourneert het aantal gewijzigde rijen.
  • Doorloop het resultaat met rs.next() en getmethoden voor het juiste type.
  • Gebruik altijd try-with-resources en handel SQLException af met de status- en foutcodes.
Gratis beginnen

Leer Java met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
104
Lessen
374

Veelgestelde vragen

Is de les “De basis van JDBC” gratis?

Ja — de volledige tekst van “De basis van JDBC” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.

Wat leer ik in “De basis van JDBC”?

Verbindingen, statements en resultsets Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Java Academy te beginnen?

Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “De basis van JDBC”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Java Academy?

Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. De basis van JDBC
  2. PreparedStatement
  3. Transacties
  4. Connection pooling met HikariCP
← Terug naar Java Academy