[Java Derby] Eccezione su disconnetti e altro

di Anonimizzato15341 il
6 risposte
Ciao a tutti!

Questo è il mio primo post in questo forum.
Sto scrivendo un progettino per l'università, esame a scelta, materiale scarso e lezioni seguite 0 poiché sono studente lavoratore.
Diciamo che me la cavo, che quello che ho scritto funziona, ma ho una eccezione che viene sollevata di cui non capisco l'origine e come si potrebbe risolvere.

Riporto parte di codice ed eccezione che ottengo:

    public void disconnetti() {
        try {
            if (stmt != null) {
                stmt.close();
            }
            if (conn != null) {
                DriverManager.getConnection(dbURL + ";shutdown=true");
                conn.close();
                //System.out.println("Disconnessione dal server effettuata con successo!");
            }
        } catch (SQLException e) {
                System.out.println("Errore su disconnetti: " + e.toString());
        }
    }
E l'eccezione che NetBeans mi spara fuori è questa:
Errore su disconnetti: java.sql.SQLNonTransientConnectionException: DERBY SQL error: SQLCODE: -1, SQLSTATE: 08006, SQLERRMC: Arresto database '842647'.
Qualcuno saprebbe aiutarmi?

Strada facendo illustrerò altri problemi/dubbi sperando che qualcuno sia in grado di aiutarmi..

6 Risposte

  • DanielVd ha scritto:


    Errore su disconnetti: java.sql.SQLNonTransientConnectionException: DERBY SQL error: SQLCODE: -1, SQLSTATE: 08006, SQLERRMC: Arresto database '842647'.
    Non me ne intendo di Derby ma ... hai letto la documentazione sullo shutdown?

    https://db.apache.org/derby/docs/10.11/devguide/tdevdvlp40464.html

    In particolare la parte "Attention: It is good practice to close ....."
  • andbin ha scritto:


    DanielVd ha scritto:


    Errore su disconnetti: java.sql.SQLNonTransientConnectionException: DERBY SQL error: SQLCODE: -1, SQLSTATE: 08006, SQLERRMC: Arresto database '842647'.
    Non me ne intendo di Derby ma ... hai letto la documentazione sullo shutdown?

    https://db.apache.org/derby/docs/10.11/devguide/tdevdvlp40464.html

    In particolare la parte "Attention: It is good practice to close ....."
    Ciao!
    Grazie, sono onesto non ho letto la documentazione ufficiale, ma slide che mi ha messo a disposizione il docente.

    Ora do' un occhio!
  • andbin ha scritto:


    DanielVd ha scritto:


    Errore su disconnetti: java.sql.SQLNonTransientConnectionException: DERBY SQL error: SQLCODE: -1, SQLSTATE: 08006, SQLERRMC: Arresto database '842647'.
    Non me ne intendo di Derby ma ... hai letto la documentazione sullo shutdown?

    https://db.apache.org/derby/docs/10.11/devguide/tdevdvlp40464.html

    In particolare la parte "Attention: It is good practice to close ....."
    Non cambia, sempre quella eccezione.. Provo a riportare anche la parte di creazione del DB e di connessione:
    
        private static String dbURL = "jdbc:derby://localhost:1527/name;create=true;user=usr;password=pwd";
        private static Connection conn = null;
        private static Statement stmt = null;
    
        public void connetti() {
            try {
                Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
                conn = DriverManager.getConnection(dbURL);
            } catch (Exception e) {
                System.out.println("Errore su connetti: " + e.toString());
            }
        }
    
  • Ho modificato il messaggio precedente poiché non andava ancora
  • DanielVd ha scritto:


    
        public void disconnetti() {
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    DriverManager.getConnection(dbURL + ";shutdown=true");
                    conn.close();
                    //System.out.println("Disconnessione dal server effettuata con successo!");
                }
            } catch (SQLException e) {
                    System.out.println("Errore su disconnetti: " + e.toString());
            }
        }
    
    L'errore e' concettuale!
    PRIMA forzi lo shutdown del DBMS, POI chiudi la connessione, che ormai e' gia' chiusa.
    La logica dice che le operazioni vanno fatte al contrario.

    Riassunto. JDBC si usa cosi:

    1) caricamento del driver del DBMS affinche' si registri nella mappa dei driver disponibili del DriverManager. Lo si fa una sola volta alla partenza del programma

    2) creazione connessione
    3) creazione statement
    4) esecuzione statement e creazione resultset.
    5) utilizzo resultset
    6) chiusura resultset
    7) se di e' utilizzato un semplice statement, close statement goto 3), se un preparedstatement, impostazione nuovi parametri, goto 4)
    close statement
    9) close connection

    Tra connessione, statement e resultset c'e' uno stretto ordine gerarchico. Se si chiude la connessione, in automatico vengono chiusi tutti gli statement ed i resultset che dipendono da questa connessione. Ed ovviamente, se si fa lo shtdown del db, ...
  • migliorabile ha scritto:


    DanielVd ha scritto:


    
        public void disconnetti() {
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    DriverManager.getConnection(dbURL + ";shutdown=true");
                    conn.close();
                    //System.out.println("Disconnessione dal server effettuata con successo!");
                }
            } catch (SQLException e) {
                    System.out.println("Errore su disconnetti: " + e.toString());
            }
        }
    
    L'errore e' concettuale!
    PRIMA forzi lo shutdown del DBMS, POI chiudi la connessione, che ormai e' gia' chiusa.
    La logica dice che le operazioni vanno fatte al contrario.

    Riassunto. JDBC si usa cosi:

    1) caricamento del driver del DBMS affinche' si registri nella mappa dei driver disponibili del DriverManager. Lo si fa una sola volta alla partenza del programma

    2) creazione connessione
    3) creazione statement
    4) esecuzione statement e creazione resultset.
    5) utilizzo resultset
    6) chiusura resultset
    7) se di e' utilizzato un semplice statement, close statement goto 3), se un preparedstatement, impostazione nuovi parametri, goto 4)
    close statement
    9) close connection

    Tra connessione, statement e resultset c'e' uno stretto ordine gerarchico. Se si chiude la connessione, in automatico vengono chiusi tutti gli statement ed i resultset che dipendono da questa connessione. Ed ovviamente, se si fa lo shtdown del db, ...
    Grazie!
    Avevo compreso dell'errore, ma comunque non andava, ora che ho un po' di tempo provo a sistemare seguendo le tue indicazioni.
Devi accedere o registrarti per scrivere nel forum
6 risposte