Java SE 8 Standard-Bibliothek  
Professionelle Bücher. Auch für Einsteiger.
 
Inhaltsverzeichnis

Vorwort
1 Neues in Java 8 und Java 7
2 Fortgeschrittene String-Verarbeitung
3 Threads und nebenläufige Programmierung
4 Datenstrukturen und Algorithmen
5 Raum und Zeit
6 Dateien, Verzeichnisse und Dateizugriffe
7 Datenströme
8 Die eXtensible Markup Language (XML)
9 Dateiformate
10 Grafische Oberflächen mit Swing
11 Grafikprogrammierung
12 JavaFX
13 Netzwerkprogrammierung
14 Verteilte Programmierung mit RMI
15 RESTful und SOAP-Web-Services
16 Technologien für die Infrastruktur
17 Typen, Reflection und Annotationen
18 Dynamische Übersetzung und Skriptsprachen
19 Logging und Monitoring
20 Sicherheitskonzepte
21 Datenbankmanagement mit JDBC
22 Java Native Interface (JNI)
23 Dienstprogramme für die Java-Umgebung
Stichwortverzeichnis

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java SE 8 Standard-Bibliothek von Christian Ullenboom
Das Handbuch für Java-Entwickler
Buch: Java SE 8 Standard-Bibliothek

Java SE 8 Standard-Bibliothek
Pfeil 21 Datenbankmanagement mit JDBC
Pfeil 21.1 Relationale Datenbanken
Pfeil 21.1.1 Das relationale Modell
Pfeil 21.2 Datenbanken und Tools
Pfeil 21.2.1 HSQLDB
Pfeil 21.2.2 Weitere Datenbanken *
Pfeil 21.2.3 Eclipse Data Tools Platform (DTP) zum Durchschauen von Datenbanken
Pfeil 21.3 JDBC und Datenbanktreiber
Pfeil 21.3.1 Treibertypen *
Pfeil 21.3.2 JDBC-Versionen *
Pfeil 21.4 Eine Beispielabfrage
Pfeil 21.4.1 Schritte zur Datenbankabfrage
Pfeil 21.4.2 Ein Client für die HSQLDB-Datenbank
Pfeil 21.5 Mit Java an eine Datenbank andocken
Pfeil 21.5.1 Der Treiber-Manager *
Pfeil 21.5.2 Den Treiber laden
Pfeil 21.5.3 Eine Aufzählung aller Treiber *
Pfeil 21.5.4 Log-Informationen *
Pfeil 21.5.5 Verbindung zur Datenbank auf- und abbauen
Pfeil 21.6 Datenbankabfragen
Pfeil 21.6.1 Abfragen über das Statement-Objekt
Pfeil 21.6.2 Ergebnisse einer Abfrage in ResultSet
Pfeil 21.6.3 Java und SQL-Datentypen
Pfeil 21.6.4 Date, Time und Timestamp
Pfeil 21.6.5 Unicode in der Spalte korrekt auslesen
Pfeil 21.6.6 Eine SQL-NULL und wasNull() bei ResultSet
Pfeil 21.6.7 Wie viele Zeilen hat ein ResultSet? *
Pfeil 21.7 Elemente einer Datenbank ändern
Pfeil 21.7.1 Einzelne INSERT-, UPDATE- oder DELETE-Anweisungen senden
Pfeil 21.7.2 Aktualisierbares ResultSet
Pfeil 21.7.3 Batch-Updates
Pfeil 21.8 Die Ausnahmen bei JDBC, SQLException und Unterklassen
Pfeil 21.8.1 JDBC-Fehlerbasisklasse SQLException
Pfeil 21.8.2 SQLWarning
Pfeil 21.9 ResultSet und RowSet *
Pfeil 21.9.1 Die Schnittstelle RowSet
Pfeil 21.9.2 Implementierungen von RowSet
Pfeil 21.9.3 Der Typ CachedRowSet
Pfeil 21.9.4 Der Typ WebRowSet
Pfeil 21.10 Vorbereitete Anweisungen (Prepared Statements)
Pfeil 21.10.1 PreparedStatement-Objekte vorbereiten
Pfeil 21.10.2 Werte für die Platzhalter eines PreparedStatement
Pfeil 21.11 Transaktionen
Pfeil 21.13 Vorbereitete Datenbankverbindungen
Pfeil 21.13.1 DataSource
Pfeil 21.13.2 Gepoolte Datenbankverbindungen
Pfeil 21.14 Zum Weiterlesen
 
Zum Seitenanfang

21.7Elemente einer Datenbank ändern Zur vorigen ÜberschriftZur nächsten Überschrift

Bisher haben wir executeQuery(…) benutzt, um Abfragen zu verfassen. Es lassen sich jedoch mit dieser Methode keine Veränderungen an Datensätzen und Einfüge-/Löschoperationen vornehmen, denn executeQuery(…) ist nur für Anfragen gedacht. Für Datenbankänderungen mit den SQL-Kommandos INSERT (fügt neue Zeilen ein), UPDATE (aktualisiert existierende Zeilen), DELETE (löscht Zeilen) gibt es andere Wege.

 
Zum Seitenanfang

21.7.1Einzelne INSERT-, UPDATE- oder DELETE-Anweisungen senden Zur vorigen ÜberschriftZur nächsten Überschrift

Damit Zeilen verändert werden können, müssen wir in zwei Schritten vorgehen:

  1. eine SQL-Anweisung mit einem UPDATE/INSERT/DELETE aufbauen und

  2. anschließend die Statement-Methode executeUpdate(…) aufrufen. Damit wird die Änderung wirksam.

Neben den Methodennamen gibt es aber noch einen anderen Unterschied zu executeQuery(…): executeUpdate(…) liefert als Rückgabewert ein int, das angibt, wie viele Zeilen von der Änderung betroffen sind, der Rückgabetyp ist kein ResultSet.

[zB]Beispiel

Füge einen Eintrag ein, und aktualisiere einen Eintrag:

String sqlInsert = "INSERT INTO Tabelle (…) VALUES (…)";
int updates1 = stmt.executeUpdate( sqlInsert );
String sqlUpdate = "UPDATE Tabelle SET …;
int updates2 = stmt.executeUpdate( sqlUpdate );

Die Methode executeUpdate(…) gibt zurück, wie viele Zeilen von den Änderungen betroffen sind. Sie ist 0, falls das SQL-Statement nichts bewirkt.

interface java.sql.Statement
extends Wrapper, AutoCloseable
  • int executeUpdate(String sql) throws SQLException
    Führt eine SQL-Anweisung aus, die Manipulationen an der Datenbank vornimmt. Die SQL-Anweisungen sind in der Regel INSERT-, UPDATE- oder DELETE-Anweisungen. Zurückgegeben wird die Anzahl der veränderten Zeilen oder null, falls eine SQL-Anweisung nichts verändert hat.

 
Zum Seitenanfang

21.7.2Aktualisierbares ResultSet Zur vorigen ÜberschriftZur nächsten Überschrift

Bisher haben wir das ResultSet nur als rein lesbare Sammlung angesehen, bei der ein Cursor einmal von oben nach unten durchläuft. Allerdings unterstützt JDBC auch flexiblere ResultSets, die auch veränderbar sind und bei denen sich der Cursor frei bewegen lässt – Voraussetzung ist nur, dass der JDBC-Treiber und die Datenbank das auch realisieren, dieses Feature ist optional.

Um sich in einem ResultSet frei bewegen und Updates an Zeilen realisieren zu können, muss im ersten Schritt statt des einfachen createStatement() eine überladene Variante aufgerufen werden:

Statement statement = connection.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE );

Wurde das ResultSet vorher auf eine Zeile bewegt, können die Belegungen einer Spalte mit den updateXXX(column, XXX)-Methoden auf den neuesten Stand gebracht und mit updateRow() dann persistiert werden; cancelRowUpdates() verwirft die angedachten Änderungen. Eine Zeile neu aus der Datenbank zu lesen macht refreshRow(), aus der Datenbank zu löschen übernimmt deleteRow().

Anstatt nur existierende Zeilen zu aktualisieren, kann mit moveToInsertRow() eine neue Zeile eingefügt werden (erst einmal als eine Art Puffer), dann mit den updateXXX(…)-Methoden gefüllt und final mit insertRow() in die Datenbank geschrieben werden.

Bei der Navigation durch ein ResultSet sind weitere Methoden nützlich, bisher haben wir nur next() benutzt: first(), last(), previous(), beforeFirst(), afterLast() und absolute(int) bzw. relative(int).

[zB]Beispiel

Lösche das letzte Ergebnis eines ResultSet rs aus der Datenbank:

rs.last();
rs.deleteRow();
 
Zum Seitenanfang

21.7.3Batch-Updates Zur vorigen ÜberschriftZur nächsten Überschrift

Das Einfügen und Ändern großer Mengen von Daten kostet viel Zeit, da für jede Modifikation ein INSERT oder UPDATE über ein Statement-Objekt abgewickelt werden muss. Eine Verbesserung stellen Batch-Updates dar, die in einem Rutsch gleich eine ganze Reihe von Daten zur Datenbank transferieren. Anstatt mit execute(…) und deren Varianten zu arbeiten, nutzen wir die Methode executeBatch(). Damit zuvor die einzelnen Aktionen dem Statement-Objekt mitgeteilt werden können, bietet die Klasse die Methoden addBatch(String sql) und clearBatch() an. Die Datenbank führt die Anweisungen in der Reihenfolge aus, wie sie im Batch-Prozess eingefügt wurden. Ein Fehler wird über eine BatchUpdateException angezeigt.

[zB]Beispiel

Wir fügen einige Einträge der Datenbank als Batch hinzu. con sei unser Connection-Objekt:

try {
Statement stmt = con.createStatement();
stmt.addBatch( "INSERT INTO Lieferanten VALUES (x,y,z)" );
stmt.addBatch( "INSERT INTO Lieferanten VALUES (a,b,c)" );
stmt.addBatch( "INSERT INTO Lieferanten VALUES (d,e,f)" );
int[] updateCounts = updateCounts = s.executeBatch();
}
catch ( BatchUpdateException e ) { /* Behandeln! */ }
catch ( SQLException e ) { /* Behandeln! */ }

Nach dem Abarbeiten von executeBatch() erhalten wir als Rückgabewert ein int-Feld mit den Ergebnissen der Ausführung. Dies liegt daran, dass in der Batch-Verarbeitung ganz unterschiedliche Anweisungen vorgenommen werden können und jede davon einen unterschiedlichen Rückgabewert verwendet.

Soll der gesamte Ablauf als Transaktion gewürdigt werden, so setzen wir im try-Block den AutoCommit-Modus auf false, damit nicht jede SQL-Anweisung als einzelne Transaktion gewertet wird. Im Fall eines Fehlers müssen wir im catch-Block ein Rollback ausführen. Übertragen wir dies auf das obere Beispiel, dann müssen nur die beiden Anweisungen für die Transaktion eingesetzt werden:

try {
con.setAutoCommit( false );
Statement s = …

}
catch ( BatchUpdateException e ) {
con.rollback();
}

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java SE 8 Standard-Bibliothek Java SE 8 Standard-Bibliothek
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Java ist auch eine Insel
Java ist auch eine Insel


Zum Rheinwerk-Shop: Professionell entwickeln mit Java EE 8
Professionell entwickeln mit Java EE 8


Zum Rheinwerk-Shop: Besser coden
Besser coden


Zum Rheinwerk-Shop: Entwurfsmuster
Entwurfsmuster


Zum Rheinwerk-Shop: IT-Projektmanagement
IT-Projektmanagement


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2018. Original - https://www.rheinwerk-verlag.de/openbook/
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 

 
 


21.12.2024 - Sitemap.xml