Schon mancher deutschsprachige Entwickler, der zum Beispiel über JDBC auf eine Oracle-Datenbank zugegriffen hat, hat gelegentlich folgende Fehlermeldung bekommen (eine Web-Suche* beweist es):
In den meisten Fällen bringt man diese Meldung rasch damit in Verbindung, dass man mit einer Ergebnismenge (Java: java.sql.ResultSet) arbeitet. Hinter ihr steckt in der Regel ein so genannter SQL-Cursor, der es erlaubt, durch die Ergebnisse einer Datenbankabfrage (select) zu iterieren. Aber wo kommt hier eine Weiterleitung ins Spiel?
Das Rätsel löst sich, wenn man irgendwo die englische Form dieser Fehlermeldung findet und versteht: Sie lautet nämlich
Das heißt nun ganz einfach, dass die ResultSet-Datenstruktur (und mithin der Cursor dahinter) nur vorwärts positioniert werden kann. Ein Zurücksetzen etwa mit der Methode ResultSet.first() ist nicht möglich und führt zu dem beobachteten Fehler.
Das englische forward heißt also hier einmal nicht "weiterleiten", sondern schlicht und einfach "vorwärts". Es ist begrüßenswert, dass Oracle seine Fehlermeldungen internationalisiert, aber diese Übersetzung könnte von Babelfish stammen.
Wie kann man nun dieses Problem lösen? Hinweise gibt es zum Beispiel in "The JDBC Tutorial" im Sun Developer Network. Dort heißt es, dass man beim Erzeugen eines Statement-Objekts zu einer Datenbank-Verbindung (Java: Connection.createStatement) für den Parameter resultSetType einen der Werte ResultSet.TYPE_SCROLL_INSENSITIVE oder ResultSet.TYPE_SCROLL_SENSITIVE angeben muss, je nachdem, ob die Ergebnismenge parallele Änderungen anderer widerspiegeln soll oder nicht. In der parameterlosen Version der Methode wird der Wert TYPE_FORWARD_ONLY verwendet, und das oben beschriebene Problem kann auftreten. Näheres beschreibt das JavaDoc zur Schnittstelle ResultSet.
* Am 2012-05-18 lieferte eine Google-Suche nach "Nur-Weiterleiten-Ergebnismenge" immerhin 137 Treffer.