# ResultSet übergabe



## baer1208 (10. Nov 2004)

hy!

kann mir wer sagen warum ich kein ResultSet übergeben kann??

will in der klasse KontaktControler das Statement ausführen lassen und dann das ResultSet rs dem TableModel übergeben! funktioniert jedoch nicht! warum??

ciao baer


----------



## DP (10. Nov 2004)

was funktioniert da denn nicht?


----------



## akira (10. Nov 2004)

Hi,

ein ResultSet ist nur so lange gültig, bis das Statement oder die Connection geschlossen wird.
Wenn Du im KontaktControler die Connection schließt, ist das ResultSet danach ungültig.

Übertrage die Daten aus dem ResultSet besser in ein Transferobjekt und übergebe dieses dem TableModel.


----------



## Guest (10. Nov 2004)

Nimm sun.jdbc.rowset.CachedRowSet


----------



## baer1208 (10. Nov 2004)

hy!



> ein ResultSet ist nur so lange gültig, bis das Statement oder die Connection geschlossen wird


das klingt einleuchtend!
also wenn ich rs.close() schreib is auch in d variablen rs nix mehr drin?? das is sehr blöd!



> Übertrage die Daten aus dem ResultSet besser in ein Transferobjekt und übergebe dieses dem TableModel.


was meinst mit nem Transferobjekt??
Vector??

hab jez leider keinen code, der is am andern pc!
aber ich versuchs mal kurz


```
class KontaktControler
ResultSet rs;
...

public ResultSet setQuery(String query) {
try { ...
return rs;
rs.close();
} catch (...) { }
return null;
}

class TableModelShow
ResultSet rs;
KontaktControler kc;
...
public void setQuery(String query) {
rs = kc.setQuery(query);
...
}
```
und der String wird übergeben aus ner anderen klasse, der TableShow
doch funktionierts nicht so wie ich will!
brauchs, damit ich gleich direkt aus d jtable löschn kann wenn ich ne reihe anklick

was passsiert,wenn ich das rs offen lasse, aber ich ne andere rs auf einmal brauch, wird rs überschrieben??

ich hoff ich hab alles beantwortet!
ciao baer


----------



## akira (11. Nov 2004)

> also wenn ich rs.close() schreib is auch in d variablen rs nix mehr drin?? das is sehr blöd!



Du kannst Dir das ResultSet als einen Cursor auf eine Zeile der Ergebnismenge vorstellen.



> was meinst mit nem Transferobjekt??



Mit einem Transferobjekt meine ich ein beliebiges Objekt, das die Daten des ResultSets aufnimmt.
Wenn Du z.B. Benutzerdaten aus einer Tabelle liest, könnte ein Transferobjekt in etwa so aussehen:


```
public class User {

   private int id;
   private String firstname;
   private String lastname;

   public User(int id, String firstname, String lastname) {
      this.id = id;
      this.firstname = firstname;
      this.lastname = lastname;
   }

   // ... getter und setter

}
```

Das befüllen dieser Objekte könnte so aussehen:


```
public List getUsers() {
   List list = new ArrayList();   

   // ... Connection und Statement erzeugen
   
   ResultSet rs = stmt.excuteQuery("select id, firstname, lastname from users");

   while(rs.next()) {
      list.add(new User(rs.getInt(1), rs.getString(2), rs.getString(3)));
   }
   return list;
}
```


----------



## baer1208 (11. Nov 2004)

hy!

danke für die antwort!
werd ma des durchdenken u dann ein feedback gebn ob is checkt hab oda net!!

thx!!

ciao baer


----------



## baer1208 (11. Nov 2004)

hy!

noch ne frage!

wenn ich rs in objekten speichere u dann in arraylist, wie komm ich dann im tablemodel zu meinen columnHeads???also spaltenüberschriften??

ciao baer


----------

