Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 32
  1. #1

    [Jsp] Tabelle e risultati query

    ho provato a fare una cosa del genere:
    codice:
            <jsp:useBean id="sql" scope="page" class="operazioni_database.Leggi" />
            <table>
                <thead>
                <th>
                    <jsp:getProperty name="sql" property="nomeColonne" />
                </th>
            </thead>
            <tbody>
                <tr>
                    <td>
                        <jsp:getProperty name="sql" property="line" />
                    </td>
                </tr>
            </tbody>
        </table>
    ovviamente l'output è parecchio disordinato.
    in pratica dovrei fare in modo che in automatico crei tanti tag th e tr/td a seconda del risultato della query.
    è possibile??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Jsp] Tabelle e risultati query

    Originariamente inviato da fermat
    codice:
            <jsp:useBean id="sql" scope="page" class="operazioni_database.Leggi" />
    ovviamente l'output è parecchio disordinato.
    in pratica dovrei fare in modo che in automatico crei tanti tag th e tr/td a seconda del risultato della query.
    è possibile??
    Non posso sapere che cosa è quella classe operazioni_database.Leggi ... quindi non posso certo dire se in quel modo è possibile.

    Per fare le cose in modo appropriato e "pulito" si dovrebbe fare come minimo così (ipotizzando solo l'uso di Servlet/JSP e non altro framework es. Struts):
    Una servlet:
    1) riceve la request.
    2) esegue la/e query.
    3) per ogni "record di informazione" crea un oggetto di una tua classe "bean".
    4) tutti gli oggetti relativi alla query li inserisce in una lista (List, ad esempio ArrayList o LinkedList).
    5) la lista la imposta come "attributo" tipicamente nel request scope o (in certi casi) nel session scope.
    6) esegue un "forward" ad una pagina JSP.

    La pagina JSP:
    1) preleva la lista.
    2) fa una "iterazione" sulla lista.
    3) sapendo le proprietà (qui dovrebbero essere note, in genere) emette in output tante righe/colonne di una tabella quante bastano.

    Per fare tutto questo la JSP potrebbe anche usare del semplice "scriptlet" (solo codice Java puro) ma sarebbe più appropriato usare dei custom tag come quelli di JSTL (es. <c:forEach>, <cut>).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    la classe in questione è questa:
    codice:
    package operazioni_database;
    
    import java.sql.*;
    
    public class Leggi {
    
        private String i = null;
        private String e = null;
        private String u = null;
        private String c = null;
        private String d = null;
        private String line = null;
        private String nomecolonne = null;
        private Connection conn = null;
        private Statement stmt = null;
        private ResultSet rs = null;
        private ResultSetMetaData rsmd = null;
        private int numcolonne = 0;
    
        public String getLine() throws SQLException {
            conn = Connessione.getConnection();
            stmt = conn.createStatement();
            rs = stmt.executeQuery("select * from movimenti");
            while (rs.next()) {
                i = rs.getString(1);
                e = rs.getString(2);
                u = rs.getString(3);
                c = rs.getString(4);
                d = rs.getString(5);
                line += i + ": " + e + ", " + u + ", " + c + ", " + d + "\n";
            }
            return line;
        }
    
        public String getNomeColonne() throws SQLException {
            conn = Connessione.getConnection();
            stmt = conn.createStatement();
            rs = stmt.executeQuery("select * from movimenti");
            rsmd = rs.getMetaData();
            numcolonne = rsmd.getColumnCount();
            for (int j = 1; j <= numcolonne; j++) {
                nomecolonne += rsmd.getColumnLabel(j) + ": ";
            }
            return nomecolonne;
        }
    }
    nn riesco a compattarla più di così.
    in pratica un metodo recupera i nomi delle colonne, e l'altro invece tutti i record.
    qualche consiglio??

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fermat
    nn riesco a compattarla più di così.
    in pratica un metodo recupera i nomi delle colonne, e l'altro invece tutti i record.
    qualche consiglio??
    Non devi "compattare" un bel niente ... devi "modellare" le cose in modo ben diverso da quanto hai fatto!!
    Tra l'altro avere una "stringona" con tutto quanto dentro: a) non ne vedo il senso e b) non vedo come potresti usarla in modo utile.
    E oltretutto non sarebbe correttissimo: line è inizialmente null, quindi nella stringa vedresti proprio un "null".
    Nel caso non fossi stato molto chiaro: quello che hai fatto non ha senso.

    Ho trovato una vecchia discussione, questa, in cui facevo un esempio (non direttamente collegato a JDBC ma il concetto cambierebbe di pochissimo).
    Ma leggila, perché probabilmente (spero), ti chiarirà le idee ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    allora ho letto la discussione bene però nn so se ho capito benissimo.
    quello che mi servirebbe a me è solo scrivere una classe che si connetta al db ed estrapoli i nome delle colonne e i dati da una tabella.
    io ho già una classe che esegue solo la connessione:
    codice:
    import java.sql.*;
    
    public class Connessione {
    
        public static Connection getConnection() throws SQLException, ClassNotFoundException {
            Connection conn = null;
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://host/db?user=user&password=pass");
            return conn;
        }
    }
    poi vorrei creare una classe che esegua la query e recuperare il tutto nela pagina jsp.
    cosa mi servirebbe per fare questo passaggio senza scrivere il tutto direttamente nella pagina (cosa che in caso saprei fare)?

  6. #6
    Come ti hanno suggerito:
    1) Prepari un oggetto PIPPO che ha come proprietà i campi della query (Es: nome , cognome) con i relativi get e set.
    2) prepari una lista vuota che avrà al suo interno n ogetti PIPPO
    3) esegui la query cilci il Resultset e instanzi per ogni record un oggetto PIPPO con i suoi valori
    4) lo aggiungi alla lista
    5) metti la lista in sessione
    6) sulla jsp iteri la lista con i suoi tr e td

  7. #7
    1) intendi questo:
    codice:
    public class Movimenti {
    
        private int entrate;
        private int uscite;
        private String causale;
        private String data;
    
        public int getEntrate() {
            return entrate;
        }
    
        public int getUscite() {
            return uscite;
        }
    
        public String getCausale() {
            return causale;
        }
    
        public String getData() {
            return data;
        }
    }
    2) per questo punto mi serve una servlet (come ad esempio quella che mi ha indicato andbin nel suo link)??

  8. #8
    1) si ok
    2)Be certo ti serve , se vuoi usare il pattern mvc ti serve una servlet che chiamerà magari delle classi dao che eseguiranno la query e ritorneranno la lista di n oggetti Movimenti alla servlet che li metterà in sessione e farà la forward sulla jsp nella quale iteri la lista e visualizzi il risultato.

  9. #9
    ho fatto una cosa del genere:
    codice:
    import java.sql.*;
    import java.util.ArrayList;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class DoQuery extends HttpServlet {
    
        @Override
        public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException {
            ArrayList list = new ArrayList();
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try {
                conn = Connessione.getConnection();
                stmt = conn.createStatement();
                rs = stmt.executeQuery("SELECT * FROM movimenti");
                while (rs.next()) {
                    list.add(new Movimenti());
                }
            } catch (SQLException e) {
                throw new ServletException("Servlet Could not display records.", e);
            } catch (ClassNotFoundException e) {
                throw new ServletException("JDBC Driver not found.", e);
            } finally {
                try {
                    if (rs != null) {
                        rs.close();
                        rs = null;
                    }
                    if (stmt != null) {
                        stmt.close();
                        stmt = null;
                    }
                    if (conn != null) {
                        conn.close();
                        conn = null;
                    }
                } catch (SQLException e) {
                }
            }
        }
    }
    come faccio nel while a passare i vari get creati nea classe Movimenti?
    il forward lo faccio con un RequestDispatcher?

    in generale sto procedendo bene?

  10. #10
    codice:
               while (rs.next()) {
                    Movimenti obj = new Movimenti();
                    obj.setEntrate(rs.getInt("ENTRATE"));
                    obj.setUscite(rs.getInt("USCITE"));
                    obj.setCausale(rs.getString("CAUSALE"));
                    obj.setData(rs.getString("DATA"))
                    list.add(obj);
                }
    Calcolando che i campi della tabella si chiamino così e poi stai attento sulla data per dargli il formato giusto.

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.