18.6.1 | Grundlagen |
Da der Typ ResultSet einen Datenbank-Cursor repräsentiert, besitzt er auch dessen Eigenschaften:Der Ablauf der Ergebnisabfrage ist in Abbildung 18.12 dargestellt.
- Er bietet Zugang zu Datensätzen, die vom Datenbankserver zurückgeliefert werden. Ein ResultSet kann deshalb auch eine leere Ergebnismenge darstellen.
- Er führt intern einen Satzzeiger, der sich immer auf dem Datensatz befindet, dessen Werte abgerufen werden können. Der Satzzeiger kann sich dabei auch vor dem ersten oder nach dem letzten Datensatz befinden.
- Er stellt Funktionen zur Verfügung, um den aktuellen Datensatz zu ändern (in JDBC 2.0).
Nach der Ausführung einer SQL-Abfrage befindet sich der des zurückgelieferten ResultSet zunächst vor dem ersten Datensatz. Durch Aufruf der Methode next() kann man den Satzzeiger des ResultSet um eine Position weiterrücken. next() liefert hierbei einen booleschen Wert zurück, der anzeigt, ob noch weitere Datensätze verfügbar sind. Dadurch, dass sich der Satzzeiger zunächst vor dem ersten Satz befindet, ist ein initialer Aufruf von next() erforderlich, um ihn auf den ersten Datensatz zu positionieren. Liefert die Abfrage keinen einzigen Datensatz zurück, liefert bereits dieser initiale Aufruf false. Dadurch können auch leere Ergebnismengen mit einem ResultSet dargestellt werden.
Connection con; ... Statement stmt = con.createStatement(); String sql = "SELECT titel, preis FROM titel"; ResultSet rs = stmt.executeQuery(sql); // Abfrage der Daten. Falls keine Daten zurückgeliefert // werden, liefert der erste Aufruf von next() bereits // false und die Schleife wird komplett übersprungen while(rs.next()) { System.out.println("Titel: "+rs.getString("titel"); System.out.println("Preis: "+rs.getFloat(2)); } ...Wenn sich der Satzzeiger auf einem gültigen Datensatz befindet, können die Daten über getXXX()-Methoden der Klasse ResultSet abgerufen werden. XXX steht hierbei für den Datentyp, der vom ResultSet zurückgeliefert werden soll. Im obigen Codeausschnitt werden die Methoden getString() und getFloat() benutzt. Sie extrahieren Daten aus der Ergebnismenge als String- bzw. float-Werte.
Die getXXX()-Methoden besitzen jeweils einen Parameter, der die Spalte in der Ergebnismenge identifiziert, deren Wert zurückgeliefert werden soll. Die Angabe der Spalte ist auf zwei unterschiedliche Arten möglich:Für beide Abfrage-Arten sind Beispiele im obigen Beispiel-Code und in Abbildung 18.12 angegeben.
- Über den Namen der Spalte in der Ergebnismenge.
Wurden bei der Abfrage Spalten-Aliase definiert, müssen die entsprechenden Aliasnamen bei der Abfrage benutzt werden.- Über die Position der Spalte in der Ergebnismenge.
Hierbei werden die Spalten in der Ergebnismenge in der Reihenfolge durchnummeriert, in der sie in der SELECT-Anweisung aufgeführt werden (beginnend bei 1).