Ho creato una semplice servlet che va a recuperare da un database i dati dei calciatori di una squadra. La servlet è richiamata da un form che chiede i dati da visualizzare tramite una check list.
Unico criterio di selezione da immettere l'annata del ragazzo.
Non riesco a capire perchè funziona una volta sì e 10 no, mi sembra una cosa assurda, ma non ci salto fuori.
:master:


codice:
import ...

public class Calciatori extends HttpServlet
{
 public void service
 (HttpServletRequest req, HttpServletResponse res)
 throws IOException
 {
  res.setContentType("text/html");
  PrintWriter out = res.getWriter();

  String gn=req.getParameter("giornonascita");
  String mn=req.getParameter("mesenascita");
  String an=req.getParameter("annonascita");
  String ln=req.getParameter("luogonascita");
  String pn="prov";
  String ind=req.getParameter("indirizzo");
  String tel=req.getParameter("tel1");
  String tel2="tel2";
  String tel3="tel3";

  String annata=req.getParameter("annata");


  /* prepare the db connection */
  String dbUrl="jdbc:odbc:db_archiviocalciatori";
  String user="";
  String password="";
  try
  {
   /* the following command load the jdbc driver */
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   Connection c = DriverManager.getConnection(dbUrl,user,password);
   Statement s=c.createStatement();

   if (annata.equals("aaaa"))
   {

    out.println("<html>");
    out.println("<body>");
    out.println("

ELENCO CALCIATORI</p>");

    annata="1980";
    int y= Integer.parseInt(annata);
    for (y=1980; y<=2010; y++)
    {
     annata=""+y;

     String query="SELECT cognome, nome, "+gn+", "+mn+", "+an+", "+ln+", "+pn+", "+ind+", "+tel+", "+tel2+", "+tel3+" FROM calciatori WHERE annonascita="+annata+" ORDER BY cognome, nome, "+an;

      ResultSet r=s.executeQuery(query);

      while(r.next())
      {
       out.print("

");
	out.print(r.getString("cognome")+"");
	out.print(r.getString("nome")+"");

       if (gn!=null){out.print(r.getString(gn)+"-");}
       if (mn!=null){out.print(r.getString(mn)+"-");}
       if (an!=null){out.print(r.getString(an)+"");}
       if (ln!=null){out.print(r.getString(ln)+"("+r.getString(pn)+")");}
       if (ind!=null){out.print(r.getString(ind)+"");}
       if (tel!=null){out.print(r.getString(tel)+""+r.getString(tel2)+""+r.getString(tel3));}
       out.print("</p>");
      }
      s.close();
     }
    }

    else
    {
     out.println("<html>");
     out.println("<body>");
     out.println("

ELENCO CALCIATORI NATI NEL "+annata+"</p>");

     String query="SELECT cognome, nome, "+gn+", "+mn+", "+an+", "+ln+", "+pn+", "+ind+", "+tel+", "+tel2+", "+tel3+" FROM calciatori WHERE annonascita="+annata+" ORDER BY  cognome, nome, "+an;

     ResultSet r=s.executeQuery(query);

     while(r.next())
     {
      out.print("

");
	out.print(r.getString("cognome")+"");
	out.print(r.getString("nome")+"");
      if (gn!=null){out.print(r.getString(gn)+"-");}
      if (mn!=null){out.print(r.getString(mn)+"-");}
      if (an!=null){out.print(r.getString(an)+"");}
      if (ln!=null){out.print(r.getString(ln)+"("+r.getString(pn)+")");}
      if (ind!=null){out.print(r.getString(ind)+"");}
      if (tel!=null){out.print(r.getString(tel)+""+r.getString(tel2)+""+r.getString(tel3));}
      out.print("</p>");
     }
     s.close();
    }
   }
   catch (Exception e)
   {
    out.println("<html>");
    out.println("<body>");
    out.println("

- ! -  ERRORE NELLA QUERY  - ! -</p>");
    out.println("

I dati inseriti nel campo annata non sono corretti.
Digitare un valore numerico di 4 cifre (ad esempio \"1990\") oppure lasciare \"aaaa\" per visualizzare tutti i calciatori tesserati a prescindere dall'anno di nascita.
</p>");
   }
   out.println("

<input type=\"button\" onclick=\"history.go(-1)\" value=\"INDIETRO\"></p>");
   out.println("</body>");
   out.println("</html>");
  }
 }
Se avete anche altri consigli per migliorare la servlet vi prego di farlo. Ciao a tutti


Ty7
Java 1.3.1_10
Tomcat 3.3