[Java Derby] Eccezione su disconnetti e altro

di il
6 risposte

[Java Derby] Eccezione su disconnetti e altro

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

  • Re: [Java Derby] Eccezione su disconnetti e altro

    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 ....."
  • Re: [Java Derby] Eccezione su disconnetti e altro

    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!
  • Re: [Java Derby] Eccezione su disconnetti e altro

    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());
            }
        }
    
  • Re: [Java Derby] Eccezione su disconnetti e altro

    Ho modificato il messaggio precedente poiché non andava ancora
  • Re: [Java Derby] Eccezione su disconnetti e altro

    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, ...
  • Re: [Java Derby] Eccezione su disconnetti e altro

    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