Designfrage zu ResultSet

Status
Nicht offen für weitere Antworten.

l00P

Bekanntes Mitglied
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:
Code:
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
 
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.
 
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
 
Ja genau. Die Struktur ist im Prinzip immer so (Pseudocode):

Code:
//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.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben