studyklar
IProg · Skript 9 · Abschnitt 4

JDBC: Datensätze einfügen und Batch-Updates

Wie kommt ein neuer Datensatz in die Tabelle, und wie viele auf einmal? Hier steht das INSERT mit Platzhaltern, dann dasselbe für viele Zeilen, zuletzt als Batch-Update. Mit Weiter geht es Schritt für Schritt voran. Ein Klick auf einen Schritt springt direkt dorthin.

Worum es geht

Skript 09, Folien 13 bis 15: Update-Operationen (Einfügen eines und mehrerer Datensätze), Batch Updates.

Eine Anwendung legt neue Mitarbeiter in der Tabelle Personal an: Nummer, Name, Geburtsdatum. Manchmal einen, manchmal viele auf einmal. Die Frage dieses Abschnitts: Wie fügt man Zeilen sicher ein, und wie spart man bei vielen Zeilen Aufrufe an die Datenbank?

Die Spalten heißen Persnr (Personalnummer), Name und Gebdatum (Geburtsdatum). Die Personen in den Beispielen haben wir uns ausgedacht; das Skript nennt keine Werte.

Aus Skript 09, Folie 11: Ein PreparedStatement hat ? als Platzhalter im SQL; setString(1, …) setzt den Wert des ersten Platzhalters.

So gehen wir vor:

  1. Eine Zeile einfügen (Folie 13).
  2. Viele Zeilen in einer Schleife einfügen (Folie 14).
  3. Viele Zeilen als Batch einfügen (Folie 15).
  4. Beide Wege vergleichen.
  5. Eine Klausurfrage dazu.

INSERT mit drei Platzhaltern

String sql = "INSERT INTO Personal(Persnr, Name, Gebdatum)"           + " VALUES (?, ?, ?)";PreparedStatement pstmt = cn.prepareStatement(sql);

INSERT INTO Personal(Persnr, Name, Gebdatum) nennt die Tabelle und die drei Spalten, die gefüllt werden. VALUES (?, ?, ?) hat für jede Spalte einen Platzhalter, in derselben Reihenfolge.

Auch beim Einfügen kommen die Werte oft aus einem Formular. Darum gilt dasselbe wie beim Lesen: Platzhalter statt angehängter Text, zum Schutz vor SQL-Injection.

Je Platzhalter die passende set-Methode

pstmt.setInt(1, pnr);pstmt.setString(2, name);pstmt.setDate(3, gebdat);

Der erste Platzhalter steht für Persnr, eine Zahl: setInt(1, pnr). Der zweite für den Namen, einen Text: setString(2, name). Der dritte für das Geburtsdatum: setDate(3, gebdat).

gebdat ist ein java.sql.Date, der Datumstyp von JDBC. Für Meier etwa Date.valueOf("2001-05-17"), also der 17.05.2001.

Noch 9 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

PersnrNameGebdatum
–Tabelle noch leer–
LegendeZeilen des SchrittsDie Tabelle Personal ist noch leer.