Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di ty7
    Registrato dal
    Jun 2004
    Messaggi
    42

    [JAVA] servlet jdbc funziona quando le pare

    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

  2. #2
    Utente di HTML.it L'avatar di plafo
    Registrato dal
    Sep 2000
    Messaggi
    84

    scusa

    ciao!
    ma che errore ti da in quelle nove volte che non funziona?




    ciao ciao

    Carlo
    non può piovere per sempre

  3. #3
    Utente di HTML.it L'avatar di ty7
    Registrato dal
    Jun 2004
    Messaggi
    42
    Rientra nelle eccezioni comprese nel catch e stampa il messaggio da me previsto per questi casi...

  4. #4
    Utente di HTML.it L'avatar di plafo
    Registrato dal
    Sep 2000
    Messaggi
    84
    prova a fare una stampa dell'eccezione e cosi puoi vedere nel dettaglio l'errore che ti da....




    ciao ciao

    Carlo
    non può piovere per sempre

  5. #5
    Utente di HTML.it L'avatar di ty7
    Registrato dal
    Jun 2004
    Messaggi
    42
    L'errore che mi da è questo:
    java.sql.SQLException: [Microsoft][Driver ODBC Microsoft Access] Impossibile usare "(sconosciuto)". File già in uso.
    Forse (la butto lì) centra la cache?

  6. #6
    Difficile capire di cosa si tratta vista che nel tuo codice non c'è (o magari non l'ho vista?!?!) la stringa "sconosciuto".
    Prova a spiegarci cos'è?

  7. #7
    Non mi sembra di vedere la chiusura della connessione, forse questo può mettere in difficoltà il povero access (ti consiglio di usare un altro database). Inoltre se vuoi velocizzare un po' la servlet ti consiglio di gestire meglio le connessioni (magari con un pool di connessioni), è impensabile aprirne una ad ogni richiesta dell'utente.

    SO: Debian Sarge kernel 2.6.11
    Lang: Java, C++, C

  8. #8
    Utente di HTML.it L'avatar di ty7
    Registrato dal
    Jun 2004
    Messaggi
    42
    Ti spiegheri volentieri cos'è "sconosciuto"...
    Il problema è che non ne ho la più pallida idea!

    Per quanto riguarda la chiusura della connessione pensavo si trattasse di quell'
    codice:
    s.close();
    che ho infilato prima del catch. Ti riferivi a qualcos'altro che non so Lucis?
    Sono talmente tante le cose che non conosco di java che la mia domanda è quantomeno retorica.
    A proposito di cose che non so, quando hai tempo potresti spiegarmi cos'è un pool di connessioni?

    Ultima cosa: che database mi consigliate per sostituire Access?

    Ciao e grazie a tutti.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.