Hallo zusammen,
ich habe mal eine Frage zu ResultSets.
ICh habe eine Datenbankklasse welche eine Verbindung zur Datenbank herstellt und die Abfragen ausfuehrt:
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.
Fehlermeldung: ResultSet is closed.
Wie haelt man nun drei unterschiedliche ResultSets zeitgleich offen?
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?