# FM:  java.sql.SQLException: Geschlossene Ergebnismenge: next



## cluster (5. Nov 2006)

Hallo liebe User,

ich muss eine Datenbankabfrage programmieren, in der nach dem Benutzer aus der Tabelle DB_User gefragt wird und das Kennwort aus der Tabelle DB_User abgefragt wird, und falls das Kennwort stimmt, dann soll aus der Tabelle Pflanzen eine Pflanze selektiert und deren Daten, wie Name, Farbe usw. ausgegeben werden.

Das Problem ist, das ich die Fehlermeldung: 
Exception in thread "main" java.sql.SQLException: Geschlossene Ergebnismenge: next
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java)
	at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java)
	at Testen.main(Testen.java:43)

bekomme aber nicht weiß, was er von mir will.

Kann mir jemand weiterhelfen?

Liebe Grüße
Cluster

Vollständigkeitshalber hier der Code:

```
import java.sql.*;

import javax.swing.JOptionPane;


public class Testen

{
  public static void main(String[] args) throws SQLException
  //Verbindung zur Datenbank herstellen
  {DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver() );
   Connection con = DriverManager.getConnection(
        "jdbc:oracle:thin:@Computername:1521:XE", "Benutzer", "Kennwort");
       Statement stmt = con.createStatement();
       boolean zugriff = false;
   //Ende    
       
       //     Fragt den Benutzer nach einem String.
       String inputName         = JOptionPane.showInputDialog("Bitte Name eingeben");
       String inputPasswort     = JOptionPane.showInputDialog("Bitte Passwort eingeben");
       String inputPflanzenname = JOptionPane.showInputDialog("Bitte Pflanzennamen eingeben");
       //Ende
       //SQL Abfrage
       ResultSet rset  = stmt.executeQuery("SELECT USER_NAME FROM DB_USER");
       //Ende SQL Abrage
       
              
       while (rset.next())
       {
           String getInputName = (rset.getString("USER_NAME"));
           if (inputName.equalsIgnoreCase(inputName))
           {
               ResultSet rset2  = stmt.executeQuery("SELECT USER_PASS FROM DB_USER " +
                                                    "where USER_NAME = '"+inputName+"'");
               while (rset2.next())
               {
                   String getInputPasswort = (rset2.getString("USER_PASS"));
                   if (inputPasswort.equalsIgnoreCase(inputPasswort))
                   {
                       JOptionPane.showMessageDialog(null, "Zugriff gestattet!");
                       
                       ResultSet rset3 = stmt.executeQuery("SELECT PFLANZENNAME FROM PFLANZEN");
                       while (rset3.next())
                       {
                           String getInputPflanzenname = (rset3.getString("PFLANZENNAME"));
                           if (inputPflanzenname.equalsIgnoreCase(inputPflanzenname))
                           {
                               JOptionPane.showMessageDialog(null,"Pflanze gefunden");
                               rset3.close();
                                     
                           }//endif
                           else
                           {
                               JOptionPane.showMessageDialog(null,"Pflanze NICHT gefunden");                        
                               rset3.close();
                           }//endelse
                       }//endwhile
                       return;
                   }//endif
                   
                   else
                   {
                       rset2.close();
                   }//end else
                       
               }//endwhile
           }//endif
           else
           {
               
           }//endelse
                        
        }//endwhile
       rset.close();
       if(zugriff == false)
       {
           JOptionPane.showMessageDialog(null, "Zugriff verweigert!");
       }//endif
       return;    
        
  }

}
```


----------



## thE_29 (5. Nov 2006)

Weil du immer das gleiche Statement verwendest!

Wenn alle 3 Selects gleichzeitig laufen, musst du 3 verschiedene Statements nehmen!

Dadurch kommt der Fehler das es zu sei!


----------



## cluster (5. Nov 2006)

hallo danke für deine Hilfe.

ich habe jetzt drei verschiedene Statements gemacht aber die glitzegleiche Fehlermeldung:
Exception in thread "main" java.sql.SQLException: Geschlossene Ergebnismenge: next
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java)
	at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java)
	at Testen.main(Testen.java:45) kommt immer noch . 
Er mekert mir immer die Zeile: while (rset3.next())  an.

Die Änderungen habe ich unten dazugefügt. Hast du es so gemeint?


```
import java.sql.*;

import javax.swing.JOptionPane;


public class Testen

{
  public static void main(String[] args) throws SQLException
  //Verbindung zur Datenbank herstellen
  {DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver() );
   Connection con = DriverManager.getConnection(
        "jdbc:oracle:thin:@....);
[color=brown]
       Statement stmtname         = con.createStatement();
       Statement stmtpasswort     = con.createStatement();
       Statement stmtpflanzenname = con.createStatement();[/color]
       boolean zugriff = false;
   //Ende    

ResultSet rset  = stmtname.executeQuery("SELECT USER_NAME FROM DB_USER");
ResultSet rset2  = stmtpasswort.executeQuery("SELECT USER_PASS FROM DB_USER " +
                                                    "where USER_NAME = '"+inputName+"'");
               while (rset2.next())...
ResultSet rset3 = stmtpflanzenname.executeQuery("SELECT PFLANZENNAME FROM PFLANZEN");
```


----------



## thE_29 (6. Nov 2006)

Probier mal hier
ResultSet rset3 = stmt.executeQuery("SELECT PFLANZENNAME FROM PFLANZEN"); 

Vorher erst das statement zu holen!

Und vergiß bei ORACLE nie jedes resultset/Statement zu schließen wenn du fertig bist, sonst haut der dir ne TOO_MUCH_OPEN_CURSORS_EXCEEEDED um die Ohren


----------



## Guest (6. Nov 2006)

Hallo The 29,

ich verstehe nicht ganz...

ich hole in meinem Code doch das Statement vor dem ResultSet?....


```
import java.sql.*;

import javax.swing.JOptionPane;


public class Testen

{
  public static void main(String[] args) throws SQLException
  //Verbindung zur Datenbank herstellen
  {DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver() );
   Connection con = DriverManager.getConnection(
        "jdbc:oracle:thin:@....
[color=orange]Statement stmtname         = con.createStatement();
       Statement stmtpasswort     = con.createStatement();
       Statement stmtpflanzenname = con.createStatement();[/color]  [size=18]//hier werden doch die Statements geholt oder???[/size]
       boolean zugriff = false;
   //Ende  

 //     Fragt den Benutzer nach einem String.
       String inputName     = JOptionPane.showInputDialog("Bitte Name eingeben");
       String inputPasswort = JOptionPane.showInputDialog("Bitte Passwort eingeben");
       String inputPflanzenname = JOptionPane.showInputDialog("Bitte Pflanzennamen eingeben");
       //Ende
       //SQL Abfrage
       ResultSet rset  = stmtname.executeQuery("SELECT USER_NAME FROM DB_USER");
       //Ende SQL Abrage
       
              
       while (rset.next())
       {
           String getInputName = (rset.getString("USER_NAME"));
           if (inputName.equalsIgnoreCase(inputName))
           {
               ResultSet rset2  = stmtpasswort.executeQuery("SELECT USER_PASS FROM DB_USER " +
                                                    "where USER_NAME = '"+inputName+"'");
               while (rset2.next())
               {
                   String getInputPasswort = (rset2.getString("USER_PASS"));
                   if (inputPasswort.equalsIgnoreCase(inputPasswort))
                   {
                       JOptionPane.showMessageDialog(null, "Zugriff gestattet!");
                       
                       ResultSet rset3 = stmtpflanzenname.executeQuery("SELECT PFLANZENNAME FROM PFLANZEN");
                       while (rset3.next())
                       {
                           String getInputPflanzenname = (rset3.getString("PFLANZENNAME"));
                           if (inputPflanzenname.equalsIgnoreCase(inputPflanzenname))
                           {
                               JOptionPane.showMessageDialog(null,"Pflanze gefunden");
                               rset3.close();
                               stmtpflanzenname.close();
                                     
                           }//endif
                           else
                           {
                               JOptionPane.showMessageDialog(null,"Pflanze NICHT gefunden");                        
                               rset3.close();
                               stmtpflanzenname.close();
                           }//endelse
                       }//endwhile
                       return;
                   }//endif
                   
                   else
                   {
                       rset2.close();
                       stmtpasswort.close();
                   }//end else
                       
               }//endwhile
           }//endif
           else
           {
               
           }//endelse
                        
        }//endwhile
       rset.close();
       stmtname.close();
       if(zugriff == false)
       {
           JOptionPane.showMessageDialog(null, "Zugriff verweigert!");
       }//endif
       return;    
        
  }

}
```


----------



## thE_29 (7. Nov 2006)

Jetzt seh ichs erst!

Du DARFST in der while Schleife doch nicht das ResultSet und Statement closen!

Erst nachher, sonst hauts den beim .next() auf!

Du hast das sowieso bei jedem


----------



## cluster (7. Nov 2006)

stimmt das lag daran. ich bekomme jetzt die fehlermeldung nicht mehr.

aber wenn ich eine nicht vorhandene pflanze eingebe dann sagt er auch pflanze gefunden.

und wenn ich auf ok oder abbrechen gehe dann schließt das jPanel nicht.


----------



## cluster (8. Nov 2006)

Entwarnung. Das Problem lag daran, dass ich nicht den eingegebenen Namen mit dem Namen in der DB verglichen haben. 

Lösung: String getInputPflanzenname = (rset3.getString("PFLANZENNAME"));
                           if (inputPflanzenname.equalsIgnoreCase(getInputPflanzenname))

Danke für die Hilfe und liebe Grüße
cluster
	
	
	
	





```

```


----------

