0Pricing
Java Academy · Lektion

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, Statement und ResultSet – 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 Connection in einem try-with-resources-Block.
  • Erstellen Sie ein Statement (oder besser ein PreparedStatement).
  • Rufen Sie executeQuery auf und durchlaufen Sie das Ergebnis mit rs.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 eine Connection.
  • Statement sendet SQL; executeQuery gibt ein ResultSet zurück, executeUpdate die Anzahl der betroffenen Zeilen.
  • Durchlaufen Sie das Ergebnis mit rs.next() und typisierten Gettern.
  • Verwenden Sie immer try-with-resources und behandeln Sie SQLException zusammen 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.

Alle Lektionen in diesem Kurs

  1. JDBC-Grundlagen
  2. PreparedStatement
  3. Transaktionen
  4. Connection Pooling mit HikariCP
← Zurück zu Java Academy