Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22

Discussione: problema jsp - mysql

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    75

    problema jsp - mysql

    Salve, cerco di esporre il mio problema.
    Sto scrivendo un'applicazione web (pagine JSP) che usa MySQL.

    Il codice seguente mostra una pagina jsp che carica dei dati dal db e li inserisce in dei campi testo.
    In particolare:
    - la stringa cf (codiceFiscale) è una stringa di 20 caratteri che proviene da un form in un'altra pagina.
    - nome è una stringa che viene istanziata in quel momento e a cui dovrebbe venir assegnato il valore ritornato dal metodo PersonaController.getNomeByCF(cf);

    Quest'ultimo è un metodo che interroga la base di dati e restituisce una stringa, per l'appunto un nome.

    Per le variabili cogn e anno vale lo stesso discorso.

    Ho scritto "dovrebbe venir assegnato" perché è proprio questo il problema, il metodo funziona correttamente, l'ho testato più volte, ma non avviene l'assegnazione, e quando vado a stampare il valore della stringa nome mi stampa un bel "NULL".

    (Effettivamente in tale metodo ho usato una variabile locale che istanzio inizialmente a NULL)

    Ho fatto un'altra prova, invece che passare il parametro cf al metodo getNomeByCF(cf), gli ho passato direttamente una stringa rappresentante un codice fiscale, e cosi facendo, effettivamente il metodo esegue la query sul db, ritorna il nome relativo e me lo assegna alla variabile nome !!!

    Un'ultima cosa, ho settato sia per la pagina JSP che per la tabella sul DB la codifica UTF-8 per evitare problemi , per l'appunto, di codifica, anche se sto utilizzando delle semplici stringhe alfanumeriche, non ci dovrebbero essere problemi del genere...

    A qualcuno viene in mento qualcosa ? Grazie

    codice:
    <%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
    <%@ page import="sqlTest.*" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Aggiorna persona</title>
    </head>
    
    <%
    	String cf = request.getParameter("codFisUpdate");
    	String nome = PersonaController.getNomeByCF(cf);
    	String cogn = PersonaController.getCognByCF(cf);
    	int anno = PersonaController.getAnnoByCF(cf);
    %>
    
    
    
    <body>
    
    <fieldset>
      <legend >Modifica persona</legend>
      <form id="form1" name="form1" method="post" action="">
        <table width=65% border="0">
          <tr>
            <td width="91">Nome</td>
            <td width="230"><input name="nome" type="text" id="nome" value="<%= nome %>" size="23" maxlength="20" /></td>
          </tr>
          <tr>
            <td>Cognome</td>
            <td><input name="cogn" type="text" id="cogn" value="<%= cogn %>" size="23" maxlength="20" /></td>
          </tr>
          <tr>
            <td>Codice fiscale</td>
            <td><input name="cf" type="text" disabled="disabled" id="cf" value="<%= cf %>" size="23" maxlength="20" /></td>
          </tr>
          <tr>
            <td>Anno di nascita</td>
            <td><input name="anno" type="text" id="anno" value="<%= anno %>" size="6" maxlength="4" /></td>
          </tr>
        </table>
      </form>
    </fieldset>
    
    
    </body>
    </html>

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Ho fatto un'altra prova, invece che passare il parametro cf al metodo getNomeByCF(cf), gli ho passato direttamente una stringa rappresentante un codice fiscale, e cosi facendo, effettivamente il metodo esegue la query sul db, ritorna il nome relativo e me lo assegna alla variabile nome !!!
    Se dici che cablando il codice fiscale funziona significa che la request non ha il parametro codFisUpdate o ce l'ha ma non è valorizzato correttamente, probabilmente la variabile cf viene valorizzata a null. Fai questa verifica...

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    75
    No, anche la variabile cf viene inizializzata correttamente, infatti nel form sotto , nel campo "codice fiscale" gliela faccio ristampare, e lo fa senza problemi...

    codice:
    <td><input name="cf" type="text" disabled="disabled" id="cf" value="<%= cf %>" size="23" maxlength="20" /></td>

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    se cf è corretto allora non dovrebbe funzionare neanche se cabli il codice fiscale, cioè è la stessa identica cosa scrivere cosi:

    codice:
    String cf="abcd";
    metodo(cf);
    e

    codice:
    metodo("abcd");
    cmq posta la classe PersonaController

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    75
    posto solo il metodo in questione , la classe è enorme

    codice:
    public static String getNomeByCF(String cf) {
    		String n = null;
    		try {
    			n = PersonaDAO.getNomeByCF(cf);
    		} catch (SQLException e) {
    			System.out.println("Eccezione: ("+e.getMessage()+")");
    		} catch (ClassNotFoundException ex) {
    			System.out.println("Eccezione: ("+ex.getMessage()+")");
    		}
    		return n;
    	}
    in cui c'è una chiamata al metodo seguente della classe PersonaDAO

    codice:
    	public static String getNomeByCF(String cf) throws SQLException, ClassNotFoundException {
    		Connection con = null;
    		PreparedStatement pstmt = null;
    		ResultSet rs = null;
    		
    		con = ConnectionManager.getConnection();
    		pstmt = con.prepareStatement(GET_NAME_BY_CF);
    		pstmt.setString(1, cf);
    		rs = pstmt.executeQuery();
    		rs.next();
    		
    		return rs.getString(1);
    	}
    
    
    String GET_NAME_BY_CF = "SELECT NOME FROM PERSONA WHERE CF = ?";
    Comunque il problema deve essere nella variabile cf , perchè questi metodi funzionano correttamente.
    Anzi, cf funziona perfettamente è il metodo getNomeByCF che si rifiuta di funzionare se gli passo cf, perché ripeto, se lo invoco (sempre sulla pagina JSP) passandogli direttamente la stringa, funziona !

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    prova ad inserire un po' di log, o andare in debug per verificare passo passo l'esecuzione del codice, per avere piu informazioni per esempio potrebbe essere interessante vedere cosa arriva a getNomeByCF e cosa restituisce quando effettui la chiamata dalla jsp con e senza cablare il cf.

    codice:
    public static String getNomeByCF(String cf) {
    System.out.println("codice fiscale:"+cf );
    		String n = null;
    		try {
    			n = PersonaDAO.getNomeByCF(cf);
    		} catch (SQLException e) {
    			System.out.println("Eccezione: ("+e.getMessage()+")");
    		} catch (ClassNotFoundException ex) {
    			System.out.println("Eccezione: ("+ex.getMessage()+")");
    		}
    System.out.println("nome:"+n );
    		return n;
    	}

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    75
    Non mi ero accorto di un particolare:
    Tomcat mi stampa :

    codice:
    Eccezione: (Illegal operation on empty result set)
    Eccezione: (Illegal operation on empty result set)
    Eccezione: (Illegal operation on empty result set)
    che sono le eccezioni generate proprio dalle 3 operazioni di assegnazione della variabili nome, cognome e anno.

    codice:
    String nome = PersonaController.getNomeByCF(cf);
    String cogn = PersonaController.getCognByCF(cf);
    int anno = PersonaController.getAnnoByCF(cf);

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    ma quel codice fiscale esiste nel db? poi certo che se nella jsp cabli un codice fiscale diverso da quello recuperato con request.getParameter è ovvio che il risultato sia diverso... a me sembra che stai facendo parecchia confusione, non guardi i log fai dei test errati, e non gestisci l'errore nel caso il cf non sia presente nel db.

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    sei in debug e non c'è una riga di controllo scommetto: fa stampare da qualche parte le query che esegui, e i parametri come vengono passati.

    Per la cronaca, un codice fiscale è composto di 16 caratteri: se per qualche ragione per raggiungere i 20 che hai deciso tu aggiungi 4 blank da qualche parte (o in qualche altro modo vi arrivano) e in database non sono previsti, non otterrai mai un match per codice fiscale. Rivedi tutto, trimma ciò che non serve e poi riposta un po' gli eventuali errori che vengono fuori e il valore dei parametri passati.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    75
    Il seguente codice è sempre della pagina JSP dove devo stampare i risultati, ho aggiunto qualche stampa

    codice:
    <%
    	String cf = request.getParameter("codFisUpdate");
    	
    	out.println("codice fiscale passato dal form: "+cf); %> 
    
    	
    <%	out.println(PersonaController.getNomeByCF("45F3G2D423TY4G23H4B3"));  %>
    	
    
    <%	out.println(PersonaController.getNomeByCF(cf));
    
    	String nome = PersonaController.getNomeByCF(cf);
    	String cogn = PersonaController.getCognByCF(cf);
    	int anno = PersonaController.getAnnoByCF(cf);
    %>
    Le stampe in rosso, funzionano regolarmente:
    con la prima stampo il valore del codice fiscale passato dal form;
    con la seconda stampo la stringa ottenuta invocando il metodo, passandogli però come parametro una stringa che rappresenta un codice fiscale effettivamente presente sul db. E il risultato è effettivamente il nome che mi aspettavo.

    Il codice in blu, mi stampa null , e sul server leggo l'eccezione "Illegal operation on empty result set"

    PS I 20 caratteri per il codice fiscale non sono significativi, sono solo prove quelle che sto facendo, comunque tutti i codici fiscali che ho inserito nel db sono tutti di 20 caratteri.

    Originariamente inviato da Vindav
    ...e non gestisci l'errore nel caso il cf non sia presente nel db.
    Si è vero non lo gestisco (per ora), ma ti assicuro che tutti i test che ho fatto, li ho eseguiti con codici presenti nel db, quindi il problema non è questo.

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.