Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[MISC]Navigieren in ResultSet nicht möglich

223 views
Skip to first unread message

Torsten Jaenicke-Rößler

unread,
Aug 21, 2002, 4:25:52 PM8/21/02
to
Hallo zusammen,

ich verbinde mich mit einer Oracle 8.1.7. Datenbank und ermittle ein
ResultSet. Dies klappt alles reibungslos, bis ich versuche, in meinem
ResultSet zu navigieren. Die Methode rs.next() funktioniert, im
Gegensatz zu rs.isLast(), rs.last() usw.
Unterstützt der verwendete Oracle-Treiber diese Funktionen nicht?

Vielen Dank für die Hilfe

public void verbinden(){
System.out.println("Programm gestartet");
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("Treiberklasse geladen");
}
catch (ClassNotFoundException ex) {
System.out.println("Treiberklasse nicht gefunden!");
ex.printStackTrace();
}
try {
con =
DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:mandy","system","manager");
System.out.println("Verbindung hergestellt");
}
catch (SQLException ex2) {
System.out.println("Verbindung nicht hergestellt");
System.exit(1);
ex2.printStackTrace();
}
}

public void abfragen(){
try {
statement = con.createStatement();
rs = statement.executeQuery("SELECT * FROM TESTTABELLE");
System.out.println("Abfrage gestellt");
System.out.println("Datensatzzeiger:"+rs.getRow());

while (rs.next())
{
System.out.print("ID: "+rs.getInt(1)+" ");
System.out.print("Name: "+rs.getString(2)+" ");
System.out.println("Geburtsdatum: "+rs.getString(3));
if (rs.isLast())
System.out.println("letzter Datensatz erreicht");
}
}
catch (Exception ex2) {
System.out.println("Abfrage fehlgeschlagen");
ex2.printStackTrace();
}
}

Fehlermeldung:

Abfrage fehlgeschlagen
java.sql.SQLException: Ungültiger Vorgang bei
Nur-Weiterleiten-Ergebnismenge: isLast
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java)
at
oracle.jdbc.driver.OracleResultSetImpl.isLast(OracleResultSetImpl.java)
at datenbanktest2.DBZugriff1.abfragen(DBZugriff1.java:64)
at datenbanktest2.DBZugriff1.main(DBZugriff1.java:15)Verbindung
geschlossen

Thomas Neumann

unread,
Aug 21, 2002, 5:41:45 PM8/21/02
to
Torsten Jaenicke-Rößler
<torsten.jaen...@mailbox.tu-dresden.de> writes:

> ResultSet zu navigieren. Die Methode rs.next() funktioniert, im
> Gegensatz zu rs.isLast(), rs.last() usw.

[...]


> public void abfragen(){
> try {
> statement = con.createStatement();

versuch hier mal

statement = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);

-Tom

Linda Radecke

unread,
Aug 21, 2002, 6:18:21 PM8/21/02
to

Torsten Jaenicke-Rößler wrote:
> ich verbinde mich mit einer Oracle 8.1.7. Datenbank und ermittle ein
> ResultSet. Dies klappt alles reibungslos, bis ich versuche, in meinem
> ResultSet zu navigieren. Die Methode rs.next() funktioniert, im
> Gegensatz zu rs.isLast(), rs.last() usw.
> Unterstützt der verwendete Oracle-Treiber diese Funktionen nicht?

[Dein Code]

Ich weiss nicht, ob der Treiber das unterstuetzt, aber dein
ResultSet ist nicht als scrollable definiert, bspw das geht
bei mir:

ResultSet rs;
String sql = "SELECT ....";

Statement st =
con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);

rs = st.executeQuery(sql);

rs.last();

int records = rs.getRow();
System.out.println("Table has " + records + " rows");

rs.beforeFirst();

while (rs.next()) {
...
}


Linda
--
.-.-. Chasing your shadow, the senses together, four-leafed and
(_\|/_) clever I come from behind. Chasing your shadow, I wander
( /|\ ) in circles, you're one in a million, we're two of a kind.
'-'-'`-.__.-' `- Neverending Love - Roxette

Winfried Gottschalk

unread,
Aug 22, 2002, 2:48:36 AM8/22/02
to
Torsten Jaenicke-Rößler
<torsten.jaen...@mailbox.tu-dresden.de> schrieb:

>ich verbinde mich mit einer Oracle 8.1.7. Datenbank und ermittle ein
>ResultSet. Dies klappt alles reibungslos, bis ich versuche, in meinem
>ResultSet zu navigieren. Die Methode rs.next() funktioniert, im
>Gegensatz zu rs.isLast(), rs.last() usw.

>Unterst=FCtzt der verwendete Oracle-Treiber diese Funktionen nicht?

Wir arbeiten bei uns auch mit einer Oracle 8.1 Datenbank. Bisher
unterstützen die Oracle-Treiber das Navigieren im ResultSet wohl noch
nicht.
Zumindestens war das das Ergebnis eines Tests eines meiner Kollegen
vor einiger Zeit

Du kannst aber auch selber herausfinden ob Dein JDBC-Treiber das
Navigieren in ResultSets unterstützt.
Dazu kannst Du bestimmte Methoden des java.sql.DatabaseMetadata
Interfaces verwenden. Die Methoden haben selbsterklärende Namen.


--
Gruß
Winfried

Zeit ist ein großartiger Lehrer,
aber leider tötet sie alle ihre Schüler.

--Hector Berlioz

Linda Radecke

unread,
Aug 22, 2002, 4:39:04 AM8/22/02
to

Winfried Gottschalk wrote:
Torsten Jaenicke-Rößler
<torsten.jaen...@mailbox.tu-dresden.de> schrieb:
[...]


> Wir arbeiten bei uns auch mit einer Oracle 8.1 Datenbank. Bisher
> unterstützen die Oracle-Treiber das Navigieren im ResultSet wohl noch
> nicht.
> Zumindestens war das das Ergebnis eines Tests eines meiner Kollegen
> vor einiger Zeit

> Du kannst aber auch selber herausfinden ob Dein JDBC-Treiber das
> Navigieren in ResultSets unterstützt.
> Dazu kannst Du bestimmte Methoden des java.sql.DatabaseMetadata
> Interfaces verwenden. Die Methoden haben selbsterklärende Namen.

Das hatte ich auch zuerst ueberprueft gehabt mit SQL Server 2000 via:

DatabaseMetadata.supportsResultSetType()
DatabaseMetadata.supportsResultSetConcurrency()

Linda
--
(=) li...@jalice.ch - http://www.jalice.net
/
(=) l.ra...@hswzfh.ch - http://www.hswzfh.ch

Winfried Gottschalk

unread,
Aug 22, 2002, 5:13:50 AM8/22/02
to
Linda Radecke <li...@jalice.ch> schrieb:

>> Du kannst aber auch selber herausfinden ob Dein JDBC-Treiber das
>> Navigieren in ResultSets unterstützt.
>> Dazu kannst Du bestimmte Methoden des java.sql.DatabaseMetadata
>> Interfaces verwenden. Die Methoden haben selbsterklärende Namen.
>
>Das hatte ich auch zuerst ueberprueft gehabt mit SQL Server 2000 via:
>
>DatabaseMetadata.supportsResultSetType()
>DatabaseMetadata.supportsResultSetConcurrency()

Sehr schön ist das ganze im Buch "Professional Java Server Programming
J2EE Edition" Wrox Press Ltd. m Kapitel "Database Programming with
JDBC" beschrieben.

Torsten Jaenicke-Rößler

unread,
Aug 22, 2002, 3:26:20 PM8/22/02
to

Linda Radecke schrieb:

> Ich weiss nicht, ob der Treiber das unterstuetzt, aber dein
> ResultSet ist nicht als scrollable definiert, bspw das geht
> bei mir:
>
> ResultSet rs;
> String sql = "SELECT ....";
>
> Statement st =
> con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
> ResultSet.CONCUR_READ_ONLY);
>

Vollkommen richtig, jetzt funktionieren die Methoden.
Das hätte ich durch ein wenig nachlesen herausbekommen können
*streuAscheaufmeinHaupt*!

ResultSet.TYPE_FORWARD_ONLY: Ergebnismenge nur vorwärts durchlaufbar,
ResultSet.TYPE_SCROLL_INSENSITIVE: Ergebnismenge ist in beide Richtungen
durchlaufbar, Änderungen nicht sofort sichtbar
ResultSet.TYPE_SCROLL_SENSITIVE: Ergebnismenge ist in beide Richtungen
durchlaufbar, Änderungen sofort sichtbar

Viele Grüße

Torsten Jaenicke-Rößler

unread,
Aug 22, 2002, 3:27:22 PM8/22/02
to
Hallo Thomas


> versuch hier mal
>
> statement = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
> ResultSet.CONCUR_READ_ONLY);
>
> -Tom

Funktioniert, vielen Dank!

Torsten Jaenicke-Rößler

unread,
Aug 22, 2002, 3:48:16 PM8/22/02
to
Hallo Winfried,

Winfried Gottschalk schrieb:

> Du kannst aber auch selber herausfinden ob Dein JDBC-Treiber das
> Navigieren in ResultSets unterstützt.
> Dazu kannst Du bestimmte Methoden des java.sql.DatabaseMetadata
> Interfaces verwenden. Die Methoden haben selbsterklärende Namen.

...dessen Verwendung folgende Informationen zutage brachten:

Treibername: Oracle JDBC driver
Treiberversion: 8.1.6.0.1
Datenbankproduktname: Oracle
Datenbankproduktversion: Oracle8i Enterprise Edition Release 8.1.6.0.0 -
Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
Majorversion: 8
Minorversion: 1

Mit Lindas Rat funktionieren aber die Methoden, die ich überprüft habe
(isLast(), last(), relative(..)).

Viele Grüße

Winfried Gottschalk

unread,
Aug 23, 2002, 2:44:58 AM8/23/02
to
Torsten Jaenicke-Rößler
<torsten.jaen...@mailbox.tu-dresden.de> schrieb:

>Mit Lindas Rat funktionieren aber die Methoden, die ich überprüft habe
>(isLast(), last(), relative(..)).

Gut zu wissen, dass das geht. Nach meinem Urlaub werde ich es mal
ausprobieren.


--
Gruß
Winfried

0 new messages