Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776

    [Java] Prendere dati da classe e stamparli su navigatore

    Ciao a tutti,


    sto cercando di scrivere il risultato di una Query, con un Servlet, su un navigatore!
    - premetto che i dati ci sono all'interno del DB
    - al DB si connette tranquillamente perche' riesco a scrivere da un altro servlet


    Come posso fare a passare correttamente i dati da questa classe "LeggiDB" al servlet "ServletLeggiDB"?
    E' corretto farlo con un array?

    Dal servlet non vedo il risultato!!!!
    L'unica cosa che vedo sul navigatore e':
    Servlet ServletLeggiDB at /Lezione22

    MI POTRESTE DARE DELLE DRITTE!!!

    LE CRITICHE SONO BEN ACCETTE!!

    Grazie,
    Roberto

    LeggiDB
    codice:
    import java.sql.*;
    public class LeggiDB  {
        Connection conn=null;
        Statement stmt=null;
        ResultSet rs=null;
        String dati[][];
       
        
        public  String[][]  connetti() {
            try{
                Class.forName("org.apache.derby.jdbc.ClientDriver");
                conn= DriverManager.getConnection("jdbc:derby://localhost:1527/Lesson22"); 
                String sqlLeggi="select * from Employee";
                stmt=conn.createStatement();
                rs=stmt.executeQuery(sqlLeggi);
                 int i=0;
                            while(rs.next()){
                dati[0][i]=rs.getString("nome");
                dati[1][i]=rs.getString("cognome");
                dati[2][i]=rs.getString("email");
                i++;          
                }
                return dati;
                
           
               
            } 
        
            catch (Exception exc){
                dati[0][0]="e' avvenuto un errore";
            return dati;
    
            }
            
            finally{
                try{
                   rs.close(); stmt.close();conn.close();}
                catch(Exception e){e.printStackTrace();}
                
            }
       
    }
    }
    ServletLeggiDB
    codice:
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    
    /**
     *
     * @author X
     */
    @WebServlet(name = "ServletLeggiDB", urlPatterns = {"/ServletLeggiDB"})
    public class ServletLeggiDB extends HttpServlet {
    
        /**
         * Processes requests for both HTTP
         * <code>GET</code> and
         * <code>POST</code> methods.
         *
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            
            try {
                /* TODO output your page here. You may use following sample code. */
                out.println("<html>");
                out.println("<head>");
                out.println("<title>Servlet ServletLeggiDB</title>");            
                out.println("</head>");
                out.println("<body>");
                out.println("<h1>Servlet ServletLeggiDB at " + request.getContextPath() + "</h1>");
    
                //out.println("<table>");
       
             LeggiDB rs=new LeggiDB();
             String risultato[][]=rs.connetti();
             //*********************************************
             int i=0;
                out.println(risultato[0][0]);
                while(risultato[0][i]!=null){
                String nome=risultato[0][i];
                String cognome=risultato[1][i];
                String email=risultato[2][i];
                i++;
                
                out.println("
    ********"+nome+cognome+email);
                
                
               
                }
                
    
            } finally {   
                 //out.println("</table>");
                            out.println("</body>");
                out.println("</html>");
                out.close();
            }
        }
    
        // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
        /**
         * Handles the HTTP
         * <code>GET</code> method.
         *
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
        }
    
        /**
         * Handles the HTTP
         * <code>POST</code> method.
         *
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
        }
    
        /**
         * Returns a short description of the servlet.
         *
         * @return a String containing servlet description
         */
        @Override
        public String getServletInfo() {
            return "Short description";
        }// </editor-fold>
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Riformulo la domanda dato che non ho avuto alcuna risposta:

    Se leggo dei dati da un database avro' un ResultSet, come posso fare a leggerlo da un'altra classe?

    Ho provato con un metodo che me lo converta in array e restituisca l'array stesso, secondo voi e' corretto(fermo restando che sarebbero pochi record, e' solo per fare una prova)?

    Dovendo andare a scrivere i risultati su un navigatore sarebbe meglio separare in 2 classi le operazioni ovvero una classe si occupa della lettura dei dati del database e un servlet si occupa poi della visualizzazione su web, o sarebbe meglio scrivere un servlet che legga direttamente i dati da DB e poi li visualizza sul navigatore?

    Grazie,
    Roberto

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    niente?

  4. #4
    E' una vita che non ho più a che fare con i resultset (jdbc ormai l'ho messo nel cassetto grazie a JPA).
    Cmq non buona prassi mantenere un resultset aperto troppo allungo dato che questo prevede di teneare anche aperta la connessione che l'ha generato.
    Venendo al succo il mio consiglio e (come vuole MVC) e di tenere separata la logica di presentazione dei dati da come questi vengono letti (database, file di testo etc...).
    Quindi la via di avere una classe che si occupi di interrogare il database e una che poi si preoccupi di come questi dati drovranno essere presentati è la via migliore.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Grazie per la risposta Francesco!!!

    Sì, tenere le due cose separate e' la cosa migliore!!!
    Il mio problema e' che non riesco a passarli dalla classe che si incarica della lettura, al servlet che si occupa della presentazione!!!
    Se faccio tutto all'interno del servlet riesco a leggerli e apresentarli senza alcun problema!!!

    Mi daresti una dritta su come passarli?

    Io ho un ResultSet come faccio a passarlo dalla classe al servlet?

    Ho provato con un metodo ma non riesco!!!

    *************************
    public ResultSet connetti() {
    try{
    ....resto del codice...

    return datiResultSet;

    }
    catch{
    ....codice
    }
    }
    *************************
    oppure restituendo un array.
    Nel servlet, utilizzando i dati ricevuti, non mi visualizza niente a video

    QUALE E' LA PROCEDURA CORRETTA, TI PREGO DAMMI UNA DRITTA!!!!!!!
    La domanda precisa e':

    che TIPO di dati deve restituire il metodo della classe che si occupa della lettura dei dati del DATABASE?

    Per JPA ti riferisci ad esempio a Hibernate?
    E' difficile da capire/studiare?

    Grazie,
    Roberto

  6. #6
    che TIPO di dati deve restituire il metodo della classe che si occupa della lettura dei dati del DATABASE?
    Non esiste una regola precisa su che tipo tale metodo deve restituire, potrebbe essere un semplice array, una Collection, una Map. Diciamo che la struttura dati che più corrisponde alle tue necessità va bene.
    Mi daresti una dritta su come passarli?
    Non capisco se una newbaggine ma non vedo il problema
    codice:
    public class StudenteDao
    {
         public Object[] getAllData()
         {
            //select * from Studente
           Object[] array = new Object[10];
           while(resultset.hasNext())
           {
               //popolo l'array con le info che mi servono
           }
           return array;
         }
    }
    //DOGET DELLA SERVLET OPPURE DOPOST
    public doget(.....)
    {
       StudenteDao studenteDao = new StudenteDao();
       Object[] rows = studenteDao.getAllData();
       //ecco qui i tuoi dati...
    }
    Per JPA ti riferisci ad esempio a Hibernate?
    E' difficile da capire/studiare?
    Hibernate è una delle implementazioni di JPA, ne esistono anche altre "Eclipselink","OpenJpa"...
    Nulla è difficile basta aver voglia di imparare.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Grazie!

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.