De basis van JDBC
Verbindingen, statements en resultsets
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,StatementenResultSet— 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
Connectionin try-with-resources. - Maak een
Statement(of beter nog eenPreparedStatement). - Roep
executeQueryaan en doorloop het resultaat metrs.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.getConnectionopent eenConnection.Statementverstuurt SQL;executeQueryretourneert eenResultSetenexecuteUpdateretourneert het aantal gewijzigde rijen.- Doorloop het resultaat met
rs.next()en getmethoden voor het juiste type. - Gebruik altijd try-with-resources en handel
SQLExceptionaf met de status- en foutcodes.
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
- De basis van JDBC
- PreparedStatement
- Transacties
- Connection pooling met HikariCP