studyklar
IProg · Klausur 2 · Aufgabe 7

JDBC: Bewertungen zwischen zwei Punktzahlen lesen

Dieselbe Suche wie in der PHP-Klasse aus Aufgabe 6, jetzt in Java: Alle Bewertungen mit Punkten zwischen min und max kommen als Liste zurück. Rechts steht der Rahmencode der Klausur; Schritt für Schritt füllt sich eine Lücke nach der anderen. Mit Weiter geht es voran.

Die Aufgabe

7) JDBC (9 Punkte)

a) Implementieren Sie die Modellklasse BewertungDB nun in Java auf der Basis von JDBC.

Eine einfache Bean-Klasse BewertungDTO mit den notwendigen Attributen und Methoden sei bereits vorhanden sowie etwas Code der Klasse BewertungDB. Die insert-Methode braucht nicht implementiert zu werden! (Der Code der Klasse steht rechts.)

Gesucht ist nur eine Methode: findBetweenPunkte. Sie bekommt eine offene Verbindung zur Datenbank (Connection cn) und zwei Grenzen. Sie liefert alle passenden Bewertungen als List<BewertungDTO>.

JDBC (Java Database Connectivity) ist die Schnittstelle, mit der Java-Programme SQL an eine Datenbank schicken. Ein DTO (Data Transfer Object) ist eine einfache Klasse, die nur Daten trägt: hier gid, Punkte und Kommentar einer Bewertung. Laut Aufgabe gibt es sie schon, mit Konstruktor und Get-Methoden.

Die Tabelle ist dieselbe wie in Aufgabe 6: Bewertung(gid, punkte, txt). Für die Aufgabe gibt es 9 Punkte.

Aus Klausur 2, Aufgabe 6 („PHP-Modellklasse BewertungDB mit mysqli“): Die PHP-Klasse BewertungDB hat dort findBetweenPunkte mit Prepared Statement, zwei Platzhaltern und einer Schleife über die Zeilen.
Merke: Alles, was JDBC öffnet, muss wieder geschlossen werden, auch im Fehlerfall. Java kann das von selbst erledigen; wie, zeigt Schritt 3.
  1. Kopf lesen und eine leere Ergebnisliste anlegen.
  2. Das SQL mit Platzhaltern.
  3. PreparedStatement in try-with-resources, Parameter setzen.
  4. Abfrage ausführen, Zeilen durchgehen, DTOs sammeln.
  5. Fehler abfangen, Liste zurückgeben.

Kopf lesen, leere Liste anlegen

  public static List<BewertungDTO> findBetweenPunkte                                   (Connection cn, int min, int max) {    List<BewertungDTO> erg = new ArrayList<>();

Der Kopf steht schon da. static heißt: Man ruft die Methode über die Klasse auf, ohne Objekt. Zurück kommt eine List<BewertungDTO>, eine Liste von Bewertungen.

Diese Liste legt man als Erstes an, leer: new ArrayList<>(). Die Schleife füllt sie später. Steht sie vor dem try, gibt es sie auch nach einem Fehler noch, und Zeile 19 kann sie zurückgeben.

Das SQL mit Platzhaltern

    String sql = "SELECT * FROM Bewertung WHERE punkte BETWEEN ? AND ?";

Das SQL ist dasselbe wie in PHP: BETWEEN ? AND ? wählt alle Zeilen mit Punkten von min bis max, beide Grenzen eingeschlossen.

Die Fragezeichen sind Platzhalter. Die Werte kommen erst nach dem Vorbereiten dazu. So kann kein Wert den SQL-Befehl verändern (Schutz vor SQL-Injection).

Aus Skript 09, Folie 11: Im SQL-Text steht ? als Platzhalter für einen Parameter; prepareStatement bereitet ihn vor.
Noch 7 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Abbildung 1Die Methode findBetweenPunkte

Lücke für Lücke

class BewertungDB {  public static List<BewertungDTO> findBetweenPunkte                                   (Connection cn, int min, int max) {     String sql =     try              } catch (SQLException e) {     }   }}
LegendeZeilen des SchrittsDer Rahmencode der Klausur: Die Lücken sind noch leer, sie füllen sich Schritt für Schritt.