Advanced   Java   Services ResultSet Back Next Up Home


Vom Statement zum ResultSet

ResultSet ist ein Interface, das von den verschiedenen Treibern durch entsprechende Klassen implementiert wird. Ein ResultSetobjekt ist das Ergebnis eines SQL-Select-Statements, das mit Hilfe eines JavaStatementObjekts erhalten wird. Damit enthält ein ResultSet eine Tabelle oder einen Teil einer Tabelle. Die Tabelle kann auch zu einer einzigen Spalte oder Zeile oder einem einzigen Element entarten.


Das Standardresultset

Im einfachsten Fall gibt es nur eine Möglichkeit, an die Daten des Resultsets heranzukommen. Jedes Resultset verfügt über einen Zeilenzeiger (Cursor), der mit der Methode next() eine Zeile weiter transportiert wird. Am Anfang steht dieser Zeilenzeiger vor der Tabelle, sodaß er mit einem ersten next()-Aufruf auf die erste Zeile der Tabelle gesetzt wird. Solange es noch weitere Zeilen gibt liefert diese Methode true zurück. Steht der Zeiger auf der letzten Zeile liefert der next()-Aufruf false. Damit bietet sich eine while-Schleife an um sich durch die Tabelle zu bewegen. Bei einem StandardresultSet kann jede Datenzelle nur einmal gelesen werden. Wie bei einer Einbahnstraße gibt es keinen Weg zurück. Des weiteren ist es nicht möglich, die Daten im Resultset zu verändern. Der Typ eines solchen Resultsets ist

Der Typ des ResultSets wird schon beim Anlegen eines Statements bestimmt. das StandardresultSet erhält man folgendermaßen:

Statement stmt = connection.createStatement();
String query = "select * from MYTABLE" ;
ResultSet rs = stmt.executeQuery(query);




Ein Aufruf von createStatement() liefert in der Regel ein Statementobjekt, das lediglich ein StandardResultSet liefern kann.


Auslesen des StandardResultSets

Um ein ResultSet auszugeben muß man die Anzahl der Spalten kennen. Es gibt eine ganze Reihe von MetaDaten zu einem ResultSet, die man über ein Objekt vom Typ ResultSetMetaData abrufen kann. Auch ResultSetMetaData ist ein Interface das von der Datenbankfirma implementiert werden muß. Das obige Beispiel zeigt auch wie man ausgehend von einem ResultSet ein ResultSetMetaDataObjekt erhält und wie man dann die Anzahl der Spalten ermittelt. Im Gegensatz zur Numerierung von Arrays beginnt der Spaltenindex bei 1. Man kann übrigens sämtliche SQL-Datentypen mit getString() auslesen. Die primitiven Datentypen werden dabei automatisch in Strings umgewandelt, bei komplexen Datentypen wird ein Javaobjekt erzeugt und dazu dann die toString()-Methode aufgerufen.

public static void printResultSet(ResultSet rs) throws SQLException
{
    ResultSetMetaData rsmd = rs.getMetaData();
    int cols = rsmd.getColumnCount();

    for(int i=1; i<=cols; i++)
        System.out.print(rsmd.getColumnLabel(i)+"\t");

    System.out.println("\n-------------------------------");

    while(rs.next())
    {
        // eine zeile ausgeben
        for(int i=1; i<=cols; i++)
            System.out.print(rs.getString(i)+"\t");

        System.out.println();
    }
}

Valid XHTML 1.0 Strict top Back Next Up Home