Aiuto per gestione database

di il
1 risposte

Aiuto per gestione database

Ciao a tutti. Sono nuovo del forum e spero di poter trovare qualcuno di buona volontà che voglia aiutarmi
Premetto di essere più che inesperto in programmazione, quello che faccio lo faccio improvvisando, solo per passione, e chiedo per questo scusa se magari farò domande banali.
Il mio problema è questo: avrei bisogno di estrarre, tramite una pagina jsp, i dati da un database mysql facendo una ricerca sulla base di due parametri o, come seconda scelta, di un solo parametro. La query dovrebbe darmi tutti i dati rispondenti alla ricerca effettuata, indipendentemente da quanti questi siano. Il problema è che la pagina che ho scritto fino ad ora mi restituisce sempre un solo risultato, anche se i dati in tabella rispondenti alla ricerca effettuata sono molti di più. Potete aiutarmi a capire cosa sbaglio??? Grazie mille
Ecco la pagina in questione:
 
    <%
        String citta = new String();
        citta = request.getParameter("citta");
        String attivita = new String();
        attivita = request.getParameter("attivita");
        Connection dbconn = null;

// carica il file di classe del driver 
// per il collegamento al database 
        Class.forName("com.mysql.jdbc.Driver");

// apre la connessione con il database "esame"
        dbconn = DriverManager.getConnection("jdbc:mysql://localhost/test?user=root&password=admin");

// manda in esecuzione l'istruzione SQL
        Statement statement = dbconn.createStatement();
        String select_query = ("SELECT nick, attivita, citta, tipo, voto, commento from opinioni WHERE opinioni.citta = '" + citta + "' and opinioni.attivita = '" + attivita + "'");
        ResultSet rs = statement.executeQuery(select_query);
        String result = "";
        String result1 = "";
        String result2 = "";
        String result3 = "";
        String result4 = "";
        String result5 = "";
        String result6 = "";
        String result7 = "";
        if (rs.next()){
            result = rs.getString("attivita");
            result1 = rs.getString("citta");
            result2 = rs.getString("tipo");
            result3 = rs.getString("commento");
        } else {
         String select_query1 = ("SELECT nick, attivita, citta, tipo, voto, commento from opinioni WHERE opinioni.citta = '" + citta + "'");
        ResultSet rs1 = statement.executeQuery(select_query1);
               if (rs1.next()){
            result4 = rs1.getString("attivita");
            result5 = rs1.getString("citta");
            result6 = rs1.getString("tipo");
            result7 = rs1.getString("commento");                  
        } else {
            out.println("Nessuna recensione trovata");
        }      
       }

//out.println(result);
%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
    
        <p align="center">&nbsp;</p>
        <p align="center">&nbsp;</p>
        <p align="center"><font color="#FFFFFF" face="Arial Black" size="4">DESCRIZIONE 
            AUTO</font></p>
        <p align="center">&nbsp;<td><textarea name="commento" rows="8" cols="37"><%=result3%> <%=result1%> <%=result2%> <%=result%></textarea></td></tr>
       <p align="center">&nbsp;<td><textarea name="commento" rows="8" cols="37"><%=result4%><%=result5%><%=result6%><%=result7%> </textarea></td></tr>
       
</p>

<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

</body>
    </body>
</html>

1 Risposte

  • Re: Aiuto per gestione database

    Ti restituisce un solo risultato perchè fai
    
    if(rs.next()){...}
    
    Il ResultSet, in sostanza, funziona come una lista concatenata, dove il metodo next() restituisce l'elemento successivo a quello corrente, perciò la funzione next() darà tanti risultati per quante volte essa verrà eseguita, ovviamente però se ho 8 risultati e la eseguo 10 volte mi darà una NullPointerException perchè il risultato 9 e 10 non esistono. Dato che il metodo next() restituisce un boolean che vale true se c'è un elemento successivo e false se si è raggiunta la fine del ResultSet, per ciclare su TUTTI i risultati hai bisogno di fare
    
    while(rs.next()){
    //processo i dati
    }
    
    Appena rs.next() restituirà false il ciclo verrà interrotto.

    Spero di essere stato chiaro, altrimenti chiedi pure, ciao!
Devi accedere o registrarti per scrivere nel forum
1 risposte