Forum Doku Wiki Blog

Forumsarchiv 2007, Juni
DB-Connection schliessen und trotzdem ResultSet zurückgeben

archivierte Beiträge lesen

  1. (JAVA/JSP) DB-Connection schliessen und trotzdem ResultSet zurückgeben von dave, 09. 06. 2007, 12:56

DB-Connection schliessen und trotzdem ResultSet zurückgeben

Der folgende Beitrag wurde am 09. 06. 2007, 12:56 Uhr von dave veröffentlicht.

Hallo liebes Forum,

meine Frage behandelt zwar Java, aber ich hoffe ihr könnt mir trotzdem weiterhelfen.

Also ich habe eine Methode, die das DB-ResultSet zurückgeben soll, und nach der Anfrage die Verbindung schliessen soll.
//Code:
 public ResultSet getDBData(String query){
  ResultSet rs_tmp;
  Connection cn = this.getConnection();
  try{
   Statement st = cn.createStatement();
   ResultSet rs = st.executeQuery(query);
   rs.close();
   st.close();
   cn.close();
   return rs;
  } catch (SQLException e){
   error = true;
   errorMsg = e.getMessage();
  }
 }

Leider meldet der Compiler, dass eine Rückgabe von "rs" nach dem schliessen nicht mehr möglich ist.

Meine Frage daher: Wie ist es möglich das ResultSet zurückzugeben und die DB-Connection zu schliessen?

vielen Dank für eure Hilfe....

DB-Connection schliessen und trotzdem ResultSet zurückgeben

Der folgende Beitrag wurde am 09. 06. 2007, 13:49 Uhr von King^Lully veröffentlicht.

> Leider meldet der Compiler, dass eine Rückgabe von "rs" nach dem schliessen nicht mehr möglich ist.
>
> Meine Frage daher: Wie ist es möglich das ResultSet zurückzugeben und die DB-Connection zu schliessen?

Die Reihenfolge der Anweisungen ändern?   ;)

DB-Connection schliessen und trotzdem ResultSet zurückgeben

Der folgende Beitrag wurde am 09. 06. 2007, 13:56 Uhr von dave veröffentlicht.

Hallo King^Lully,

vielen Dank für deine Antwort.

Leider habe ich mit
> Die Reihenfolge der Anweisungen ändern?   ;)
nicht sehr viel angefangen. Kannst du dies bitte näher erläutern?

grüße
dave

DB-Connection schliessen und trotzdem ResultSet zurückgeben

Der folgende Beitrag wurde am 09. 06. 2007, 14:04 Uhr von King^Lully veröffentlicht.

Mach mal
    return rs;
bevor Du die Objekte closed.

DB-Connection schliessen und trotzdem ResultSet zurückgeben

Der folgende Beitrag wurde am 09. 06. 2007, 14:06 Uhr von dave veröffentlicht.

> Mach mal
>     return rs;
> bevor Du die Objekte closed.

naja, da wird die Connection nicht wieder geschlossen :-(

DB-Connection schliessen und trotzdem ResultSet zurückgeben

Der folgende Beitrag wurde am 09. 06. 2007, 14:09 Uhr von King^Lully veröffentlicht.

> > Mach mal
> >     return rs;
> > bevor Du die Objekte closed.
>
> naja, da wird die Connection nicht wieder geschlossen :-(

Was passiert denn, wenn Du das Resultset-Objekt zurückgibst und gar kein Objekt schliesst? (JAVA/JSP wird schon das Schliessen irgendwie im Hintergrund besorgen.)

DB-Connection schliessen und trotzdem ResultSet zurückgeben

Der folgende Beitrag wurde am 09. 06. 2007, 14:11 Uhr von King^Lully veröffentlicht.

> Was passiert denn, wenn Du das Resultset-Objekt zurückgibst und gar kein Objekt schliesst? (JAVA/JSP wird schon das Schliessen irgendwie im Hintergrund besorgen.)

Hab jetzt doch mal einen näheren Blick auf den Code geworfen, was geht denn da genau ab? Mal erläutern...

DB-Connection schliessen und trotzdem ResultSet zurückgeben

Der folgende Beitrag wurde am 09. 06. 2007, 14:20 Uhr von dave veröffentlicht.

also:
Die Ganze Klasse ist als Singleton angelegt.
getConnection() lädt den JDBC-Treiber und stellt eine Verbindung zur DB her.
//kommentierter Code:
 public ResultSet getDBData(String query){
  //Verbindung aufbauen
  Connection cn = this.getConnection();
  try{
   //Die normalen DB-Methoden
   Statement st = cn.createStatement();
   //query ist SQL-Anfrage
   ResultSet rs = st.executeQuery(query);
   //Schliessen
   rs.close();
   st.close();
   cn.close();
   //Hier sollte das ResultSet übergeben werden, um nachher einen HTML-Table zu erzeugen
   return rs;
  } catch (SQLException e){
   //Fehlerbehandlung
   error = true;
   errorMsg = e.getMessage();
  }
 }

DB-Connection schliessen und trotzdem ResultSet zurückgeben

Der folgende Beitrag wurde am 09. 06. 2007, 15:07 Uhr von King^Lully veröffentlicht.

Ich kenne mich mit Java nicht aus, aber ein paar Anmerkungen:

> Die Ganze Klasse ist als Singleton angelegt.

Ein Singleton ist eine einelementige Menge, vermute mal, dass das eine Klasse ist, die nur einmalig instaziiert werden kann, korrekt?

> public ResultSet getDBData(String query){
>   //Verbindung aufbauen
>   Connection cn = this.getConnection();

Greifst Du auf eine bestehende Verbindung zurück, wo ist der Connection-String?

>   try{
>    //Die normalen DB-Methoden
>    Statement st = cn.createStatement();
>    //query ist SQL-Anfrage
>    ResultSet rs = st.executeQuery(query);

So, jetzt hast Du die Datensatzmenge.

>    //Schliessen
>    rs.close();
>    st.close();
>    cn.close();
>    //Hier sollte das ResultSet übergeben werden, um nachher einen HTML-Table zu erzeugen
>    return rs;

Jetzt gibst Du zu spät das rs zurück, denn dieses ist ja gerade geschlossen worden.

>   } catch (SQLException e){
>    //Fehlerbehandlung
>    error = true;
>    errorMsg = e.getMessage();
>   }
> }

Wird die Fehlermeldung zurückgegeben?

solved -> RowSet

Der folgende Beitrag wurde am 09. 06. 2007, 15:16 Uhr von dave veröffentlicht.

danke für deine Bemühungen.
Sofern die Connection beendet wird, ist auch das ResultSet weg.
Daher muss man vorher etwas "überstülpen" wie zB ein RowSet.
//Code (sollte jemand vor einem ähnlichen Problem stehen):
...
import com.sun.rowset.CachedRowSetImpl;
...
 public CachedRowSetImpl getDBRowSet(String query){
  CachedRowSetImpl rset;
  Connection cn = this.getConnection();
  try{
   rset = new CachedRowSetImpl();
   Statement st = cn.createStatement();
   ResultSet rs = st.executeQuery(query);
   rset.populate(rs);
   rs.close();
   st.close();
   cn.close();
   return rset;
  } catch (SQLException e){
   e.printStackTrace();
  }
  return null;
 }

DB-Connection schliessen und trotzdem ResultSet zurückgeben

Der folgende Beitrag wurde am 09. 06. 2007, 14:12 Uhr von dave veröffentlicht.


> Was passiert denn, wenn Du das Resultset-Objekt zurückgibst und gar kein Objekt schliesst? (JAVA/JSP wird schon das Schliessen irgendwie im Hintergrund besorgen.)

Das würde gehen, darf ich aber nicht. Steht eindeutig in der Angabe.
Ich denke ich muss dies mit einem Array oder ähnlichem lösen. RowSet?

DB-Connection schliessen und trotzdem ResultSet zurückgeben

Der folgende Beitrag wurde am 09. 06. 2007, 15:56 Uhr von Slyh veröffentlicht.

Hallo,

> Die Reihenfolge der Anweisungen ändern?   ;)

Dieter Nuhr!

Gruß
Slyh

DB-Connection schliessen und trotzdem ResultSet zurückgeben

Der folgende Beitrag wurde am 09. 06. 2007, 16:49 Uhr von King^Lully veröffentlicht.

> > Die Reihenfolge der Anweisungen ändern?   ;)
>
> Dieter Nuhr!

Häh, der Kabarettist? Verstehe ich nicht.

Aber Dir ist schon aufgefallen, dass die Objekte geschlossen werden bevor das RecordSet zurückgegeben wurde?

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4