studyklar
IProg · Skript 9 · Abschnitt 2

JDBC: Daten lesen und ändern mit Statement

Steht die Verbindung, kann das Programm SQL schicken. Hier steht, wie man mit einem Statement Zeilen liest und Zeilen löscht. Rechts wächst der Code der Folie Zeile für Zeile. Mit Weiter geht es Schritt für Schritt voran. Ein Klick auf einen Schritt springt direkt dorthin.

Worum es geht

Skript 09, Folien 7 und 8: einfaches JDBC, Änderungen und Lesen. Wir beginnen mit dem Lesen (Folie 8), damit das Löschen danach dieselben Zeilen trifft.

Zwei Dinge tut ein Programm mit einer Datenbank: Es liest Daten (SELECT) und es ändert Daten (INSERT, UPDATE, DELETE). JDBC hat dafür zwei verschiedene Methoden. Die Frage dieses Abschnitts: Welche Methode für was, und was kommt jeweils zurück?

cn ist die offene Verbindung, eine Connection. Zum Ausprobieren nehmen wir eine Beispieltabelle Product mit drei Zeilen; sie steht nicht im Skript.

Aus Skript 09, Folie 5: DriverManager.getConnection(url, user, password) öffnet die Verbindung und liefert eine Connection.

So gehen wir vor:

  1. Den SELECT-Befehl als Text zusammensetzen.
  2. Ein Statement erzeugen und das SELECT ausführen.
  3. Das Ergebnis Zeile für Zeile lesen.
  4. Alles schließen.
  5. Zeilen löschen und die Zahl der gelöschten Zeilen lesen.
  6. Eine Klausurfrage dazu.

Den SQL-Befehl als Text bauen

String cid = "47"; // z.B. von BenutzereingabeString sql = "SELECT id, name"           + " FROM   Product"           + " WHERE  categoryId = " + cid;
SELECT id, name FROM   Product WHERE  categoryId = 47

Für JDBC ist ein SQL-Befehl ein gewöhnlicher String. Die Folie setzt ihn aus drei Stücken zusammen, damit er lesbar bleibt. Das letzte Stück hängt die Kategorie aus cid an, laut Kommentar etwa eine Eingabe des Benutzers.

Mit cid gleich "47" entsteht der Text unten. Gesucht sind also Id und Name aller Produkte der Kategorie 47.

Eine Eingabe einfach in den SQL-Text zu kleben, ist gefährlich. Warum, zeigt Skript 09, Folie 10 (SQL-Injection).

Statement erzeugen, SELECT ausführen

Statement stmt = cn.createStatement();ResultSet rs = stmt.executeQuery(sql);

cn.createStatement() liefert ein Statement: ein Objekt, das SQL-Befehle über die Verbindung an die Datenbank schickt.

executeQuery(sql) schickt das SELECT ab. Zurück kommt ein ResultSet, die Ergebnismenge: alle Zeilen, die das SELECT gefunden hat. Hier sind das die Zeilen mit Id 1 und 2, denn nur sie haben die Kategorie 47.

Noch 8 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 1

idnamecategoryId
1Tisch47
2Stuhl47
3Lampe12
LegendeZeilen des SchrittsDie Beispieltabelle Product mit drei Zeilen.