2017-05-10 1 views
0

Erreur dans le traitement RequestContext Chemin:/Employésexception de pointeur nul Java Eclipse NEON

Servlet Chemin:/dipendente

Infos Chemin: null

Chaîne de requête: null

Stack Trace

java.lang.NullPointerException 
it.proxima.dipendenti.dao.DipendenteDAO.getDipendente(DipendenteDAO.java:53) 

Ceci est DAO

public class DipendenteDAO 
{ 
private Connection con; 
private Statement cmd; 
private static DipendenteDAO istance; 

public static DipendenteDAO getIstance() 
{ 
    if(istance == null) istance = new DipendenteDAO(); 
    return istance; 
} 

private DipendenteDAO() 
{ 
    try 
    { 
     DataSource ds = (DataSource) new 
     InitialContext().lookup("java:jboss/datasources/andreadb"); 

     Connection con = ds.getConnection(); 
     System.out.println("con:"+con); 

    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

public Dipendente getDipendente(String Codicefiscale) 
{ 
    Dipendente result = null; 
    try 
    { 
     // Eseguiamo una query e immagazziniamone i risultati in un oggetto 
     ResultSet 
     String qry = "SELECT * FROM dipendenti WHERE Codicefiscale 
     ='"+Codicefiscale+"'"; 
     ResultSet res = cmd.executeQuery(qry); 

     while(res.next()) 
     { 
      result = new Dipendente(); 
      result.setNome(res.getString("Nome")); 
      result.setCodicefiscale("Codicefiscale"); 
      result.setCognome(res.getString("Cognome")); 
      result.setDatadinascita(res.getDate("Datadinascita")); 
      result.setLuogodinascita(res.getString("Luogodinascita")); 
     } 
    } 
    catch (SQLException e) 
    { 
     // Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return result; 

} 

c'est le code Servlet

@WebServlet("/Dipendente") 
public class DipendenteServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 



public Dipendente getAnagrafica(String Cf) 
{ 
    DipendenteDAO dd = DipendenteDAO.getIstance(); 
    Dipendente dip = dd.getDipendente(Cf); 
    if(dip == null) System.out.println("ERRORE: Codice fiscale non presente 
    nel sistema"); 
    else System.out.println(dip.getNome() + " " + dip.getCognome()); 
    dd.close(); 
    return dip; 
} 
protected void doGet(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException { 

    String codiceFiscale = request.getParameter("Codice_Fiscale"); 
    Dipendente ds = this.getAnagrafica(codiceFiscale); 

    response.getWriter().append(ds.getNome()+" "+ds.getCognome()); 



} 

personne ne sait ce qui pourrait dépendre?

Ligne 53 de l'erreur est la suivante:

53: ResultSet res = cmd.executeQuery(qry); 

en mode débogage, l'instruction cmd est nulle

Initialiser cmd je reçois la même erreur. Peut-être qu'il y a une autre erreur dans le con de connexion?

Répondre

2

Votre cmd est ...

private Statement cmd; 

... mais vous n'attribuez rien à lui. Alors, comment voulez-vous que ce soit autre chose que null? Si vous tentez d'appeler une méthode sur un objet null, le résultat sera NullPointerException.

Ce que vous manquez quelque chose comme ça avant la ligne 53 ...

cmd = con.createStatement(); 

Cela vous permettra de l'objet Connection créer un nouveau Statement et l'assigner à votre variable cmd.

s'il vous plaît noter également que cette ...

Connection con = ds.getConnection(); 

... signifie que le ...

private Connection con; 

... seront également toujours null, ce qui dans le même problème. Remplacez-le par ...

con = ds.getConnection(); 

Explication: Avec votre code, vous créez une variable NEW con, qui est valable uniquement dans le constructeur, tandis que l'autre variable, également appelée con, sera toujours null. Ce n'est pas ce que tu veux. Vous voulez créer un Connection en quelque sorte et l'assigner à la variable déjà existante con, pas créer une nouvelle variable con qui sera oubliée dès que le constructeur est fait.

+0

Initialiser cmd je reçois la même erreur. Peut-être qu'il y a une autre erreur dans le con de connexion? –

+0

Probablement à cause de l'autre bogue dans votre code, j'ai mis à jour la réponse. –

+0

Fonctionne parfaitement! Merci beaucoup! –