JDBC-Grundlagen
Verbindungen, Statements und Result Sets
JDBC-Grundlagen ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist JDBC?
JDBC (Java Database Connectivity) ist die Standard-API für den Zugriff auf relationale Datenbanken aus Java.
- Sie befindet sich im Paket
java.sql. - Jeder Datenbankanbieter liefert einen Treiber, der die JDBC-Schnittstellen implementiert.
- Sie schreiben Code gegen Schnittstellen wie
Connection,StatementundResultSet– niemals direkt gegen die Klassen des Anbieters.
Dank dieser Abstraktion kann derselbe Code mit PostgreSQL, MySQL, H2 oder Oracle verwendet werden.
Die zentralen Schnittstellen
Drei Schnittstellen übernehmen den größten Teil der Arbeit:
Connection– eine geöffnete Sitzung mit der Datenbank.Statement/PreparedStatement– sendet SQL.ResultSet– ein Cursor über die von einer Abfrage zurückgegebenen Zeilen.
Sie erhalten eine Connection von DriverManager oder einer DataSource.
Eine Verbindung öffnen
DriverManager.getConnection(url, user, password) gibt eine aktive Connection zurück.
Die JDBC-URL identifiziert die Datenbank, zum Beispiel jdbc:postgresql://localhost:5432/shop. Moderne Treiber registrieren sich automatisch. Daher müssen Sie Class.forName(...) nicht mehr aufrufen.
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 und ResultSet implementieren alle AutoCloseable.
Öffnen Sie sie immer innerhalb eines try-with-resources-Blocks, damit sie automatisch geschlossen werden – auch wenn eine Ausnahme ausgelöst wird. Durch nicht geschlossene Verbindungen ist die Datenbank schnell erschöpft.
- Ressourcen werden in umgekehrter Reihenfolge geschlossen.
- Ein
finally-Block ist nicht erforderlich.
Eine Abfrage ausführen
Erstellen Sie für ein einfaches SELECT ein Statement und rufen Sie executeQuery auf. Diese Methode gibt ein ResultSet zurück.
Das Beispiel verwendet eine In-Memory-Simulation, damit Sie den Ablauf ohne eine echte Datenbank sehen können. In einer Produktionsumgebung würde das SQL über die Verbindung ausgeführt.
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);
}
}
}Ein ResultSet auslesen
Ein ResultSet befindet sich zunächst vor der ersten Zeile. Rufen Sie rs.next() in einer Schleife auf; die Methode gibt false zurück, wenn keine weiteren Zeilen vorhanden sind.
Lesen Sie Spalten anhand ihres Namens oder ihres 1-basierten Index mit typisierten Gettern aus:
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 für Schreibvorgänge
Verwenden Sie für INSERT, UPDATE und DELETE executeUpdate. Die Methode gibt ein int zurück: die Anzahl der betroffenen Zeilen.
Verwenden Sie execute nur, wenn Sie im Voraus nicht wissen, ob die Anweisung ein Resultset zurückgibt.
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());
}
}
}Zeilen auf Objekte abbilden
Die meisten Anwendungen wandeln jede Zeile in ein Domänenobjekt um. Durchlaufen Sie das ResultSet und erstellen Sie Instanzen.
Hier sehen Sie das entsprechende Muster, simuliert, damit es eigenständig ausgeführt werden kann. Ein record macht die Abbildung kompakt.
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 behandeln
Nahezu jede JDBC-Methode löst die geprüfte Ausnahme SQLException aus.
Sie enthält nützliche Diagnoseinformationen:
getMessage()– für Menschen lesbarer Text.getSQLState()– der standardmäßige 5-stellige Statuscode.getErrorCode()– der anbieterspezifische Code.
Protokollieren Sie diese Informationen, anstatt die Ausnahme zu verschlucken.
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() gibt ein DatabaseMetaData-Objekt zurück, das die Datenbank selbst beschreibt.
Damit können Sie den Produktnamen und die Version, unterstützte Funktionen sowie sogar Tabellen und Spalten ermitteln. So funktionieren Werkzeuge wie Schema-Browser, ohne Details des jeweiligen Anbieters fest zu codieren.
Alles zusammenführen
Ein typischer Ablauf zum Lesen:
- Öffnen Sie eine
Connectionin einem try-with-resources-Block. - Erstellen Sie ein
Statement(oder besser einPreparedStatement). - Rufen Sie
executeQueryauf und durchlaufen Sie das Ergebnis mitrs.next(). - Bilden Sie die Spalten auf Objekte ab.
- Lassen Sie try-with-resources alles schließen.
In der nächsten Lektion machen wir Abfragen sicher gegen Injection.
Kurztest
Was gibt Statement.executeUpdate zurück?
Zusammenfassung
Sie kennen nun den grundlegenden JDBC-Ablauf:
DriverManager.getConnectionöffnet eineConnection.Statementsendet SQL;executeQuerygibt einResultSetzurück,executeUpdatedie Anzahl der betroffenen Zeilen.- Durchlaufen Sie das Ergebnis mit
rs.next()und typisierten Gettern. - Verwenden Sie immer try-with-resources und behandeln Sie
SQLExceptionzusammen mit ihren Status- und Fehlercodes.
Häufig gestellte Fragen
Ist die Lektion „JDBC-Grundlagen“ kostenlos?
Ja — der vollständige Text von „JDBC-Grundlagen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „JDBC-Grundlagen“?
Verbindungen, Statements und Result Sets Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „JDBC-Grundlagen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.