Mehrere unterschiedliche ResultSets

Status
Nicht offen für weitere Antworten.

FenchelT

Bekanntes Mitglied
Hallo zusammen,

ich habe mal eine Frage zu ResultSets.

ICh habe eine Datenbankklasse welche eine Verbindung zur Datenbank herstellt und die Abfragen ausfuehrt:

Code:
import java.sql.*;

public class DB_Klasse 
{
//	 Instanzvariablen
	// --------------------
	   private static Connection connection;
	   private Statement statement;
	   private ResultSet resultRead;
	  
	   
	// Konstruktor der Klasse 
	// -----------------------
	   public DB_Klasse ()
	   {
		   try
		   {
			   // Treiber laden
			   // ----------------
			   	  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

			   
			   // Verbindung zur Datenbank aufbauen
			   // -----------------------------------
			   	  connection =
			   		  DriverManager.getConnection
			   		  	("jdbc:odbc:TEST", "user", "pw");
			    
			   
			   // initialisieren
			   // -----------------
			   	  this.statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
	
		} // end try
		catch(Exception e)
		{
			System.out.println(e.getMessage());
		} // end catch
	
	}
	
	
	
	
	
	public ResultSet read(String query)
	{
		// SQL-Statement absetzen (einfaches SQL-Statement)
		// ----------------------------------------------------
		   try
		   {
			   this.resultRead = this.statement.executeQuery
		   			(query);
			   
		   }
		   catch (Exception ex)
		   {
			   System.out.println(ex.getMessage());
		   }
		   
		   return this.resultRead;
		   
	}  // end read
	
	

	
	
	public void terminate()
	{
		try
		{
			this.statement.close();
			connection.close();
		}
		catch (Exception ex)
		   {
			   System.out.println("Geworfene Exception  der Methode terminate() \n" + ex.getMessage());
		   } // end catch
	}
	
	
}


Nun gibt die Methode read() ein ResultSet an die aufrufende Klasse zurueck.
Soweit funktioniert das.

Nun moechte ich aber durch die Methode read drei unterschiedliche Resultsets zurueckgeben lassen und drei unterschiedlichen Instanzvariablen der aufrufenden Klasse zuweisen.


Code:
import java.sql.*;


public class MyController 
{
	ResultSet rsVertragskopf;
	ResultSet rsVertragsprodukt;
	ResultSet rsVertragskunde;
	
	String sqlVertragskopf;
	String sqlVertragskunde;
	String sqlVertragsprodukt;
	
	public MyController()
	{
		
	}
	
	
	
	public void steuerung()
	{

		DB_Klasse db = new DB_Klasse();
		
		// SQLs aufbauen
		// ----------------
			this.sqlVertragskopf = "SELECT vnr, vertragnr, gueltigvon, gueltigbis, loekz FROM vertragskopf WHERE loekz = 'N'";
		
			this.sqlVertragskunde ="SELECT vnr, klnr, klnrjde FROM vertragskunde WHERE loekz = 'N'";
			
			this.sqlVertragsprodukt = "SELECT vnr, pr, prlv, sollmenge, preis FROM vertragsprodukt WHERE loekz = 'N'";
			
			
		// Queries ausfuehren
		// --------------------
			this.rsVertragskopf = db.read(sqlVertragskopf);
			this.rsVertragskunde = db.read(sqlVertragskunde);
			this.rsVertragsprodukt = db.read(sqlVertragsprodukt);
			
			ausgabe();
			
	}
	
	
	public void ausgabe()
	{
		int intVertragskopfVnr=0;
		int intVertragskundeVnr=0;
		int intVertragsproduktVnr=0;
		
		try
		{
			while(this.rsVertragskopf.next())                                                   <-----hier wird bereits mit einem Fehler ausgestiegen
			{
				intVertragskopfVnr=this.rsVertragskopf.getInt("vnr");
				System.out.println(intVertragskopfVnr);
				System.out.println("--------------------\n");
				
				while(this.rsVertragsprodukt.next())
				{
					intVertragsproduktVnr = this.rsVertragsprodukt.getInt("vnr");
					
					if (intVertragsproduktVnr == intVertragskopfVnr)
					{
						System.out.println(this.rsVertragsprodukt.getInt("pr"));
						System.out.println(this.rsVertragsprodukt.getFloat("sollmenge"));
						System.out.println(this.rsVertragsprodukt.getFloat("preis"));
						System.out.println("\n\n\n");
					}
				}
				
			}
				
		}
		catch (Exception ex)
		{
			System.out.println("Fehleralarm: " + ex);
		}
		
	}
}

Fehlermeldung: ResultSet is closed.

Wie haelt man nun drei unterschiedliche ResultSets zeitgleich offen?
 

foobar

Top Contributor
Warum machst du das nicht über eine einzige Query mit nem Join über die 3 Tabellen?

Ausserdem solltest du die DB-Schicht besser kapseln. Es ist keine gute Idee ResultSets aus dem Backend an die View weiter zureichen. Guck dir mal das DAO-Pattern an.
 

FenchelT

Bekanntes Mitglied
Hallo foobar,

erstmal Danke fuer Deine Antwort.
Das mit dem JOIN ist leider nicht so einfach, wie es auf den ersten BLick erscheint, da die Produkte nicht am Kunden, sondern auf gleicher Ebene wie die Kunden dem Vertrag zugeordnet sind. Aber das alles zu erklaeren wuerde etwas zu weit fuehren.

Gibt es eine Moeglichkeit, drei unterschiedliche Resultsets gleichzeitig zu benutzen, wenn ich entgegen jeder Regel, die Daten doch aus dem Backend Bereich herausgeben moechte?


Danke nochmals fuer DEine Unterstuetzung
 

FenchelT

Bekanntes Mitglied
Hallo nochmal,

habe mich nun mehrere Wochen ueber das CachedRowSet belesen :### u.A. bei Sun direkt.

Ich werde einfach nicht schlau daraus :autsch:

Kann mir jemand auf die Spruenge helfen?

Wie muss ich vorgehen um ein CachedRowSet zu implementieren?


Ich stehe ganz ehrlich was das Thema angeht ziemlich auf dem Schlauch. :bahnhof:

Hat evtl. jemand sogar ein kleines Beispiel fuer mich?


Vielen Dank nochmals fuer eure Unterstuetzung.
 
G

Gast

Gast
hi FenchelT,

für die Benutzung von CachedRowSet habe ich keine Idee.

Nur eine Anmerkung: Initialisiere doch drei Statementvariablen und weise die Ergebnisse Deine drei Abfragen den einzelnen Variablen zu. Dann verlieren die ResultSets auch den Inhalt nicht.

noch ohne benutzername
 

FenchelT

Bekanntes Mitglied
Hallo,

danke fuer den Vorschlag, die Idee hatte ich auch schon. Da ich die Daten aber eine ganze Zeit lang vorhalten muss und ich gelesen habe, dass man mit Statement Ressourcen sorgsam umgehen sollte, stand dies fuer mich nicht
wirklich zur Diskussion.

Habe das Ergebis nun in drei ListArrays geladen um damit weiterzuarbeiten, aber gluecklich bin ich damit auch nicht.
Ich suche immernoch nach einem Beispiel, wie CachedRowsets erzeugt und eingesetzt werden :roll:

Danke nochmals und viele Gruesse
FenchelT
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Daten auf mehrere Tabellen aufteilen oder Spalten nutzen Datenbankprogrammierung 2
J Mehrere WHERE Werte benutzen Datenbankprogrammierung 2
G ID zuweisung eines TerminKalenders (mehrere Kalender) Datenbankprogrammierung 8
K Mehrere Benutzer Datenbankprogrammierung 6
D JPQL- Query über mehrere Tabellen Datenbankprogrammierung 7
O HSQLDB Eine Entität, mehrere Tabellen Datenbankprogrammierung 8
S Abfrage von Gruppentickets(Mehrere Resorts an einem Tag) Datenbankprogrammierung 1
E Mehrere Tabellenspalten mit INNER JOIN verknüpfen Datenbankprogrammierung 1
M MySQL Insert über mehrere Tabellen Datenbankprogrammierung 7
Androbin [Serializing] Mehrere Objekte in einer einzigen Datei speichern Datenbankprogrammierung 1
S MySQL Abfrage über mehrere Tabellen + Einträge werden überschrieben Datenbankprogrammierung 1
S HSQLDB Mehrere PreparedStatements ausführen Datenbankprogrammierung 3
I MySQL Vergleich über mehrere Tabellen! Join? Datenbankprogrammierung 6
J Mehrere Inserts bei Fehlschlag abbrechen Datenbankprogrammierung 2
P Mit Hibernate mehrere Datensätze löschen Datenbankprogrammierung 7
F [SQLite] Mehrere Datensätze einfügen Datenbankprogrammierung 12
M DB: Mehrere Zeilen in einer Zeile zusammenführen Datenbankprogrammierung 10
D Frage zu INSERTS über mehrere Datenbanktabellen Datenbankprogrammierung 3
U Nur den ersten Datensatz löschen wenn mehrere gleiche da sind Datenbankprogrammierung 2
G JOIN Abfrage über mehrere Tabellen Datenbankprogrammierung 15
G SQL Abfrage über mehrere Tabellen Datenbankprogrammierung 28
O eine Tabelle hat mehrere PrimKey mit dem selben Wert Datenbankprogrammierung 9
T Theoriefrage : mehrere User vs gleichen Datensatz Datenbankprogrammierung 4
multiholle SQL Querry über mehrere Spalten Datenbankprogrammierung 12
N mehrere Abfragen nacheinander wie mit MS Access mit JAVA Datenbankprogrammierung 3
O Mittelwert über mehrere Zeilen Datenbankprogrammierung 11
G Mehrere Tabellen abfragen Datenbankprogrammierung 7
D mehrere Datensätze in ein Listenfeld Datenbankprogrammierung 2
T JAVA JDBC mehrere Anfragen direkt hintereinander ausführen Datenbankprogrammierung 2
S Select über mehrere Datenbanksysteme Datenbankprogrammierung 14
M Mehrere Tabellen zusammenführen Datenbankprogrammierung 4
W Prepared Statement mehrere Zeichenketten Datenbankprogrammierung 4
P [Hibernate] Mehrere Keys in einem <set> Datenbankprogrammierung 11
G Insert-anweisung mehrere Varianten eine geht Datenbankprogrammierung 2
N mehrere tables hintereinander Datenbankprogrammierung 4
W Nur ein Datensatz wird angezeigt, obwohl mehrere existieren Datenbankprogrammierung 7
N Mehrere Abfragen gleichzeitig - was passiert da? Datenbankprogrammierung 6
L mehrere Abfragen mit einem Statement!? Datenbankprogrammierung 5
M Mehrere ResultSets gleichzeitig verwenden Datenbankprogrammierung 3
L Mehrere SQL-Statements gleichzeitig!? Datenbankprogrammierung 5
F mehrere Datenbankupdates nacheinander Datenbankprogrammierung 3
V SQLite 2 Tabellen vergleichen und nur Unterschiedliche Sätze rausgeben. Datenbankprogrammierung 31
M Access Abfrage mit Parameter & Access/Java liefern unterschiedliche Ergebnisse Datenbankprogrammierung 2
S unterschiedliche Datentabellen Datenbankprogrammierung 8
V Abhängiges Verarbeiten zweier ResultSets Datenbankprogrammierung 0
N executeUpdate "innerhalb" eines Resultsets Datenbankprogrammierung 14
F statements und resultsets schließen Datenbankprogrammierung 2
J Größe eines ResultSets Datenbankprogrammierung 12
H Problem: Resultsets bzw Queries in einander verschachteln ? Datenbankprogrammierung 3
W Anzahl der Spalten eines ResultSets bestimmen Datenbankprogrammierung 5
T Anfang des ResultSets Datenbankprogrammierung 6
M Abfragen auf ResultSets Datenbankprogrammierung 3
P Wirkliche Zeilenanzahl eines ResultSets ermitteln Datenbankprogrammierung 22
J Alle Spalten und Zeilen eines ResultSets ausgeben ? Datenbankprogrammierung 2
M begrenzte anzahl von resultsets pro connection?? Datenbankprogrammierung 6

Ähnliche Java Themen


Oben