# Designfrage zu ResultSet



## l00P (23. Feb 2006)

hallo zusammen!

Irgendwie stehe ich da bei einem Problem an:
Habe 2 Klasse:
Class A, Class B

In A ist die main methode und in B wird alles was db betrifft gehandelt, unter anderem auch folgende methode:

```
public ResultSet selectData(String sql)	{		

		ResultSet rs = null;
		
	    try
	    {
	      Statement stat = con.createStatement();	      
	      rs = stat.executeQuery(sql);
	      stat.close();		     
	    }
	    catch(SQLException e)
	    {
	      System.out.println(e.getMessage());
	    }
	    
	    return rs;
	
	}
```

in der klasse A in der main methode will ich den rs den ich da bekomme weiterverarbeiten mit .nesxt(), .getString() ...
das geht aber nicht weil der comopiler meint das der rs bereits geschlossen wurde. Wie macht man das in der regel? was sollte diese methode zurückgeben und wie bekomme ich den rs als return , das wäre mir das liebste.

danke schonmal
lg


----------



## SamHotte (23. Feb 2006)

Normal wird man den ResultSet vor dem stat.close() auslesen und bspw. aus jedem Datensatz ein entsprechendes Objekt generieren und diese in einer Liste, einem TableModel oder sowas sammeln.


----------



## l00P (23. Feb 2006)

hmm, leider kann ich mir da jetzt nichts darunter vorstellen. Heißt das das ich alle ergebnisse vom select gleich in dieser Methode verarbeite und z.B. in einer Liste oder so speichere und die dann als return nehme?? Geht das so?

dank


----------



## SamHotte (23. Feb 2006)

Ja genau. Die Struktur ist im Prinzip immer so (Pseudocode):


```
//SELECT-Statement ausführen
List ergebnis = new ArrayList();
rs = stmt.executeQuery();
while (rs.next()) {
  MeineKlasse element = new MeineKlasse();
  element.attribut1 = rs.getInt("Spalte1");
  element.attribut2 = rs.getString("Spalte2");
  ...
  ergebnis.add(element);
}
```

Danach wird das Statement geschlossen, denn die Datenbankverbindungen sollten nicht dauernd offen sein.
MeineKlasse hat halt für jede Spalte deiner Datenbank-Relation ein entsprechendes Feld; statt der Liste kannst du auch eine HashMap füllen etc. Rückgabewert deiner Methode ist nun die Liste, nicht der ResultSet.


----------



## l00P (23. Feb 2006)

super, danke, jetzt kenn i  mi aus 

lg


----------

