Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    118

    [Java applicazioni web]Dubbi su connessione al database

    Ciao a tutti e buon natale.
    E da poco che uso java per scrivere applicazioni web(fino ad ora usavo PHP), il mio problema e capire il comportamento del applicativo quando richiamo le pagine jsp. Ovvero, ho una classe Database scritta cosi
    codice:
    package PKTecWeb;
    
    import java.sql.*;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    
    public class Database {
        private Connection con;
        private Statement stmt;
        private ResultSet rs;
        
        public Database(String user, String password){
            try
            {
                Class.forName("com.mysql.jdbc.Driver");
                con =  DriverManager.getConnection("jdbc:mysql://localhost/TecWeb",user,password);
                stmt = (Statement) con.createStatement();
            } catch (SQLException | ClassNotFoundException e) {
                Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, e);
            }  
        }
        public void ChiudiConnessione()
        {
            try {
                rs.close();
                stmt.close();
                con.close();
            } catch (SQLException ex) {
                Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        public ResultSet EseguiQuery(String query)
        {
           try {
                stmt.executeQuery(query);
                rs = stmt.getResultSet();
                return rs;
           } catch (SQLException ex) {
               Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
               return null;
           }
        }
    }
    poi ho una classe documento appartenente allo stesso parkage in cui eseguo questa metodo
    codice:
     
    public Documenti(String NumeroDoc) throws SQLException{       PKTecWeb.Database dba=new PKTecWeb.Database("root","");
           String str="select * from Utenti";
           ResultSet rs = dba.EseguiQuery(str);
           rs.next();
    }
    ora se da una pagina jsp richiamo il costruttore Documenti in questo modo
    codice:
            <%
                String DOCn= request.getParameter("doc");
                Documenti doc = new Documenti(DOCn);
            %>
    la pagina va in errore dicendo la riga rs.next() punta a NULL. mentre se richiamo tutto da jsp quindi facendo cosi
    codice:
    <%            String DOCn= request.getParameter("doc");
                PKTecWeb.Database dba=new PKTecWeb.Database("root","");
                String str = "select * from Utenti";
                ResultSet rs = dba.EseguiQuery(str);
                rs.next();
            %>
    funziona correttamente.
    potreste dirmi cosa sbaglio? grazie in anticipo e scusate per tutto il codice mostrato ma penso sia il modo migliore per spiegare il mio problema.

  2. #2
    Se guardi bene c'è una bella differenza tra i due codici....
    nella classe documenti quando esegui la query "executeQuery" non assegni a niente il ritorno "ResultSet" ma poi invochi il metodo getResultSet che serve ad altro

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    118
    Quote Originariamente inviata da francesco.muia Visualizza il messaggio
    Se guardi bene c'è una bella differenza tra i due codici....
    nella classe documenti quando esegui la query "executeQuery" non assegni a niente il ritorno "ResultSet" ma poi invochi il metodo getResultSet che serve ad altro
    Grazie.
    Scusa l'ignoranza ma purtroppo non ho capito bene cosa intendi dire. nella classe documenti eseguo la funzione Eseguiquery presente nella classe Database che interoga il database tramite la funzione Executequery e poi con il metodo GetResultSet assegno il risultato ad una variabile che poi ritorno alla funzione chiamante. ora quello che non capisco e perchè se la funzione chiamante si trova nella classe Documenti non funziona mentre se la funzione viene chiamata dalla jsp funziona

  4. #4
    Scusa avevo letto male il codice io, quando dici che rs.next punta null cosa intendi che rs è null oppure il metodo next ti ritorna null?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    118
    Ancora grazie per la risposta.
    Comunque rs.next() restituisce null.
    Ne approfitto per affrontare un altra mia lacuna. Ovvero in ogni jsp io inizio aprendo una nuova connessione col database con l'istruzione
    codice:
    PKTecWeb.Database dba=newPKTecWeb.Database("root","");
    faccio ciò che devo con il database dopo di che chiudo la connessione con l'istruzione
    codice:
    dba.ChiudiConnessione()
    Questo per ogni jsp, e la cosa giusta da fare? (mentre uso l'applicazione mi capita che il resultSet ritorni senza risultato mentre se levo la chiusura nelle jsp non succede

  6. #6
    Riguardando un pò tutto il codice ho visto che gestisci le eccezioni in maniera un po' anomala cioè soffocando lo stacktrace, secondo me rs è nullo perchè si verifica sicuramente un eccezione e tu poi nel catch ritorni null.
    Per quanto riguarda la gestione delle connessioni di solito per le web app si usano i datasource.
    Usando la connessione come stai facendo tu devi ogni volta chiudere tutte le risorse che hai aperto e devi assicurati che questo avvenga.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    118
    Quote Originariamente inviata da francesco.muia Visualizza il messaggio
    Riguardando un pò tutto il codice ho visto che gestisci le eccezioni in maniera un po' anomala cioè soffocando lo stacktrace, secondo me rs è nullo perchè si verifica sicuramente un eccezione e tu poi nel catch ritorni null.
    Per quanto riguarda la gestione delle connessioni di solito per le web app si usano i datasource.
    Usando la connessione come stai facendo tu devi ogni volta chiudere tutte le risorse che hai aperto e devi assicurati che questo avvenga.
    grazie mille per l'aiuto. Gestendo corretamente gli errori mi sono accorto che aprivo la connessione con il db nel init della jsp(erroraccio). Per quanto riguarda la connessione so che e consigliato un pool di connessioni ma purtroppo e un progetto universitario che devo consegnare e siccome so che il pool si implementa sul web server vorrei evitare in quanto non saprei come effettuare la consegna. Grazie ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.