# Probleme mit "nur vorwärts gerichtete ResultSet"



## Njoerd (10. Aug 2006)

Rufe so Stored Procedure auf

```
cs=con.prepareCall("{call getmyeditableprojects(?)}");
            cs.setString(1,user);
            rs=cs.executeQuery();
```

dan zähle ich die zeilen:

```
private int countRows(){
       try{
           int ret=0;
           while(rs.next())
                ret++;
           return ret;
       }catch(Exception e){System.out.println(e.toString());}
       return -1;
     }
```
bis daher geht ja noch alles gut, dann möchte ich aber die zeilen auch an in ein Array schreiben

da muss ich doch mit

```
rs.first()
```
in die erste zeile springen und dann kann ich mit while(rs.next)) wieder das ResultSet abarbeiten, leider funktioniert das nicht das ich in die erste Zeile srpinge, bekomme immer

```
com.microsoft.sqlserver.jdbc.SQLServerException: Der angeforderte Vorgang wird für nur vorwärts gerichtete ResultSets nicht unterstützt.
```
Wie bekomme ich ein nicht nur vorwärtsgerichtetes ResultSet?

achja der Coder der Stored Procedeure

```
Alter PROCEDURE getmyeditableprojects
	@user nvarchar(50)
AS
BEGIN
SET NOCOUNT ON;

Declare @id_user bigint
set @id_user=(select id_benutzer from benutzer where benutzername=@user)
Declare @id_project bigint
Set @id_project =(SELECT fk_id_project from project_user_right Where (fk_id_user=@id_user and id_right='1'))

--rs für Java
Select [name] from projekt where id_projekt=@id_project
END
```

kann mir da jemand helfen?

ich mein mir ist schon klar das ich das in der while schleife der countRow()  funktion auch machen könnte aber es muss doch auch anders gehen
achja verwende den jdbc treiber von MS


----------



## thE_29 (10. Aug 2006)

Das wird meistens von der Datenbank gar nicht unterstützt!

Dh, entweder machst du nochmals den gleichen select oder du speicherst alles in eine ArrayList und wandelst das in ein Object Array um!

In Java gibts dynamische Arrays und vorgefertigte ArrayListen also nehmt die auch..

Das was du da machst ist ja schon fast C Like...


----------



## Leroy42 (10. Aug 2006)

Ich verstehe jetzt nicht was das mit C zu tun haben soll,
aber _diese Art_ Problem gibt es immer und in jeder Sprache, wenn man eine vorher
unbekannte Anzahl von _WasAuchImmer_ in einem Array speichern
will, dessen Länge bei Definition angegeben werden muß.

- Einlesen der Zeilen einer Textdatei
- Eingabe von Zahlen, Strings, ... von der Konsole bis Endekennung
- ...

Darum the_29's Lösungsansatz verwenden


```
class MeinArray extends ArrayList<MeinTyp> {}
...
MeinTyp[] holeDaten() {
    MeinArray list = new MeinArray();
    while (nochDatumDa())
        list.add(nextDatum());

    MeinTyp[] array = new MeinTyp[list.size()];
    int i = 0;
    for (MeinTyp elem : list)
        array[i++] = elem;
    return array;
}
```

Das Kopieren in den Array kannst du mit Sicherheit vermeiden,
ich habe allerdings die Arraygenerierung bei Verwendung generischer
Typen nicht im Kopf.


----------



## Guest (10. Aug 2006)

Danke mal fürs erste, bin kurz nach dem psot draufgekommen das ich die Stored PRocedure noch mal aufrufen kaönnte und so nochmal ein frisches Resultset bekomme.
Was mich allerdings jetz verwirrt ist wie ihr auf ein array kommt, ich verwende ja gar keines in meinem Java code, sicher könnte ich mein resultset in eine arraylist eintragen aber bei 2 kurzen zeilen zahlt sich das gar nicht aus.

Was daran auserdem C Like? also der Java source nicht ev. der source von der Stored Procedure oder reden wir da jetzt aneinander vorbei?


----------



## NJoerd (10. Aug 2006)

Danke mal fürs erste, bin kurz nach dem psot draufgekommen das ich die Stored PRocedure noch mal aufrufen kaönnte und so nochmal ein frisches Resultset bekomme.
Was mich allerdings jetz verwirrt ist wie ihr auf ein array kommt, ich verwende ja gar keines in meinem Java code, sicher könnte ich mein resultset in eine arraylist eintragen aber bei 2 kurzen zeilen zahlt sich das gar nicht aus.

Was daran auserdem C Like? also der Java source nicht ev. der source von der Stored Procedure oder reden wir da jetzt aneinander vorbei?


----------



## Leroy42 (10. Aug 2006)

Anonymous hat gesagt.:
			
		

> Was mich allerdings jetz verwirrt ist wie ihr auf ein array kommt



Vielleicht, weil das hier irgendjemand erwähnt hat?  ???:L  :shock: 



			
				Njoerd hat gesagt.:
			
		

> bis daher geht ja noch alles gut, dann möchte ich aber die zeilen auch an in ein Array schreiben



Was mit _C-like_ gemeint war, weiß ich auch nicht.


----------



## SlaterB (11. Aug 2006)

Frage: 
> bis daher geht ja noch alles gut, dann möchte ich aber die zeilen auch an in ein Array schreiben 

Antworten:
Array

> Was mich allerdings jetz verwirrt ist wie ihr auf ein array kommt, ich verwende ja gar keines in meinem Java code

??


----------



## njoerd (11. Aug 2006)

achja hab ich wirklich geschrieben bin schon verwirrt, werd halt auch immer älter ???:L


----------

