Derby/JavaDB result set closed

chrisööö

Mitglied
Hallo,
ich bekomme immer folgende Fehlermeldung:

Dez 01, 2013 4:37:27 PM Remote.RemoteAsync$10 run
SEVERE: null
Exceptions.SasInternalException: Invalid operation: result set closed
at Controller.User.User.loadDepots(User.java:136)
at Controller.Remote.RemoteServiceImpl.getDepot(RemoteServiceImpl.java:187)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:160)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
at com.sun.proxy.$Proxy7.getDepot(Unknown Source)
at Remote.RemoteAsync$10.run(RemoteAsync.java:420)
at java.lang.Thread.run(Thread.java:722)

Java:
public boolean loadDepots() throws SasInternalException {
        try {
            depotdao = new DepotDAO();
            depots = depotdao.getUserDepots(this);
        } catch (SasInternalException ex) {
            throw new SasInternalException(ex.getMessage());
        }
        return true;
    }

Dies ist die Methode die auf die DepotDAO Klasse zugreift

Java:
public List<Depot> getUserDepots(User user) throws SasInternalException {
        //ArrayList die die Depots enthält
        ArrayList<Depot> depotList = new ArrayList<Depot>();
        //Ergebnis für die SQL Abfrage
        ResultSet result = null;
        //Verbindung zur Datenbank holen
        Connection connection = dbm.getConnection();
        //Statement das die SQL Abfrage beinhaltet
        PreparedStatement statement = null;


        try {
            //SQL String mit wildcards wird vorbereitet
            statement = connection.prepareStatement(
                    "select * from \"Depot\" where EMAIL = ?");

            //Wildcards werden ersetzt
            statement.setString(1, user.getEmail());

            //Statement wird ausgeführt
            result = statement.executeQuery();

            //Alle gefundenen Datensätze werden eingelesen
            while (result.next()) {

                    Depot depot = read(result);
                    depot.setLoadedFromDB(true);
                    //Der Depotliste wird das Depot hinzugefügt
                    depotList.add(depot);
                
            }

            //Fehlerbehandlung
        } catch (SQLException ex) {
            Logger.getLogger(DepotDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new SasInternalException(ex.getMessage());
        } finally {
            //Verbindung zur Datenbank wird geschlossen
            dbm.disconnect();
        }

        return depotList;
    }

Die Methode getUserDepots liefert mir die Depots zu einem User. Hier tritt der Fehler scheinbar auf. Leider weiss ich nicht warum. Er tritt auch nicht immer auf. Nur ab und an. Das jeweilige Depot wird trotz Fehlermeldung geladen. Ich sehe einfach keinen Fehler. Scheinbar ist das Resultset geschlossen und es wird noch zugegriffen. Kann mir Jemand helfen?
 

turtle

Top Contributor
Scheinbar ist das Resultset geschlossen und es wird noch zugegriffen

Leider genau hierzu sehe ich keinerlei Code. Vermutung ist, das du Connection,Statements, Resultset nicht korrekt schließt.

Ich persönlich halte auch das Auffangen von SQLExceptions und diese als SasInternalException ohne Stacktrace weiter zu werfen für falsch. Daher wissen wir nicht, ob da unten nicht was ganz anderes passiert ist.
 

chrisööö

Mitglied
Hallo,
ein prinStackTrace() liefert folgende Ausgabe:

java.sql.SQLException: Das ResultSet ist nicht geöffnet. Die Operation 'next' ist unzulässig. Prüfen Sie, ob das automatische Festschreiben inaktiviert ist.
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
at org.apache.derby.client.am.ResultSet.next(Unknown Source)
at Model.DepotDAO.getUserDepots(DepotDAO.java:252)
at Controller.User.User.loadDepots(User.java:134)

Ich vermute das damit ein setAutoCommit() gemeint ist?

Selbst wenn ich ein !result.isClosed() in die Abfrage noch hinzufüge kommt der Fehler noch.

Java:
//Alle gefundenen Datensätze werden eingelesen
            while (result.next() && !result.isClosed()) {

                Depot depot = read(result);
                depot.setLoadedFromDB(true);
                //Der Depotliste wird das Depot hinzugefügt
                depotList.add(depot);

            }
 
Zuletzt bearbeitet:

turtle

Top Contributor
Wenn es das setAutoCommit() wirklich ist, ich gehe auch mal davon aus, interessiert mich die Art der Verbindung zur DB.

Kannst du daher bitte mal den jdbc Verbindungsaufbau posten?

Desweiteren scheinst du mit RMI zu arbeiten und schlage vor, alle diese Dinge mal zu entfernen und nur ein kleines Testprogramm zu schreiben, das ausschließlich in die DB einloggt, loadDepots aufruft und über das Resultset iteriert und auf der Konsole ausgibt.

So können wir ausschließen, das andere Themen/Probleme involviert sind.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Operation not allowed after Result Set closed Datenbankprogrammierung 7
Thallius MySQL Warum gibt result verschiedene Datumsformate? Datenbankprogrammierung 1
D Datenbank result als Auswahliste im GUI anzeigen lassen Datenbankprogrammierung 0
D Hibernate CreateQuery ohne Result Datenbankprogrammierung 7
M Logikfrage: Auf zweites Result warten Datenbankprogrammierung 2
M MySQL JDBC Result abfangen Datenbankprogrammierung 7
S executeBatch result immet mit Statement.SUCCESS_NO_INFO Datenbankprogrammierung 4
J illegal operation on empty result set Datenbankprogrammierung 21
H com.mysql.jdbc.NotUpdatable: Result Set not updatable Datenbankprogrammierung 2
S Result Set in Charts ausgeben! Datenbankprogrammierung 7
P Problem mit Result-set Datenbankprogrammierung 13
zilti java.sql.SQLException: Before start of result set Datenbankprogrammierung 2
P Fehler: result-set zeigt auf null, aber warum Datenbankprogrammierung 4
megachucky Problem mit: SQL Exception Before start of result set Datenbankprogrammierung 2
G How to put SQL query result into a file Datenbankprogrammierung 3
D result ausgabe in Html Tabelle Datenbankprogrammierung 10
K java.sql.SQLException: Before start of result set Datenbankprogrammierung 2
berserkerdq2 database is closed, obwohl ich alle statements in try catch blöcken habe? Datenbankprogrammierung 5
S MySQL hibernate exception: illegal state exception : entityManagerFactory is closed Datenbankprogrammierung 5
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
J SQLite ResultSet closed -- Wiederholende DB-Abfragen Datenbankprogrammierung 6
H ResultSet is closed tritt bei JSF aber nicht bei einer Java-Applikation auf Datenbankprogrammierung 10
E Hibernate Session closed nach Transaction commit? Datenbankprogrammierung 7
S ResultSet closed Datenbankprogrammierung 2
G SQLException: No operations allowed after connection closed Datenbankprogrammierung 2
P ResultSet closed Datenbankprogrammierung 7
A Operation not allowed after ResultSet closed Datenbankprogrammierung 13

Ähnliche Java Themen

Neue Themen


Oben