Skip to content

Aktualisieren und Löschen

Warum behandeln wir beides hier? Weil sie auf der Datenbankseite im Wesentlichen dasselbe sind. Ein UPDATE ändert eine bestehende Zeile und ein DELETE ebenso. Wir verwenden auch den gleichen Weg, um sie an die Datenbank zu senden.

Anstelle von executeQuery rufen wir executeUpdate auf. Es gibt auch eine Methode namens execute, die wir ebenfalls verwenden könnten, aber executeUpdate liefert direkt die Anzahl der geänderten Zeilen.

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Delete {
    static DataSource dataSource;

    public static void main(String[] args) {
        try (Connection conn = dataSource.getConnection();
             PreparedStatement stmt = conn.prepareStatement("""
                     DELETE FROM player WHERE id = ?
                     """)) {
            stmt.setInt(1, 10);
            int changed = stmt.executeUpdate();
            System.out.printf("Gelöscht %d Zeile%n", geändert);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Idealerweise sollten wir jetzt Löschte 1 Zeile ausgeben. Das ist die Anzahl der Zeilen, die wir mit unserer Abfrage gelöscht haben. Das ist eine gute Möglichkeit, um zu überprüfen, ob die Abfrage eine Auswirkung auf unsere Daten hatte.

Wenn wir diese Abfrage mit einem Schlüsselwort RETURNING kombinieren, können wir stattdessen executeQuery aufrufen und unsere Ergebnisse lesen, wie wir es im vorherigen Abschnitt getan haben.

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DeleteReturning {
    static DataSource dataSource;

    public static void main(String[] args) {
        try (Connection conn = dataSource.getConnection();
             PreparedStatement stmt = conn.prepareStatement("""
                     DELETE FROM player WHERE id = ? RETURNING player_name
                     """)) {
            stmt.setInt(1, 10);
            ResultSet resultSet = stmt.executeQuery();
            while (resultSet.next()) { // Wir könnten hier auch if verwenden, da wir nur eine Zeile erwarten.
                System.out.printf("Gelöschter Spieler %s%n", resultSet.getString("player_name"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}