2012-12-07 56 views
0

我有一個servlet下面的代碼:當用戶在數據庫中的電子郵件地址的Java Servlet的 - 空指針異常

try 
{ 
    EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("Flights_AssignmentPU"); 
    EntityManager em = emFactory.createEntityManager(); 

    Query query = em.createNamedQuery("Passengers.findByPassportNum"); 
    query.setParameter("passportNum", passport); 
    List<Passengers> result = query.getResultList();    
    em.close(); 

    for(int i = 0; i < result.size(); i++) 
    { 
     name = result.get(i).getName(); 
     surname = result.get(i).getSurname(); 
     email_address = result.get(i).getEmail(); 
    } 
} 
catch(Exception e) 
{ 
    response.sendRedirect("ErrorPage.html"); 
} 

if(email_address.isEmpty() == false) 
{ 
     //Send email using email address 
} 

此代碼的工作就好了。但是,如果數據庫中的電子郵件字段爲空,則GlassFish服務器會給我一個空指針異常。

行應該爲這肯定這個人是:

 email_address = result.get(i).getEmail(); 

出於某種原因,當用戶沒有電子郵件,此行給我剛纔所描述的錯誤。我怎麼解決這個問題?

編輯

創建實體類時getEmail自動生成的方法(I已經使用的持久性)。

下面是它的代碼:

public String getEmail() { 
    return email; 
} 
+0

問題在於'Passengers.getEmail'其中還沒有包含在源。 –

+0

向我們展示完整的堆棧跟蹤和您的實體類。 –

+0

你意味着NPE堆棧跟蹤中的第一行指向你「絕對責怪」的特定行。但基於目前發佈的代碼邏輯,這似乎是不可能的。你能否修改你的含義和假設?順便說一下,'sendRedirect()'不會從方法中奇蹟般地返回... – BalusC

回答

4

我覺得問題是這一行:

if(email_address.isEmpty() == false) 
{ 
     //Send email using email address 
} 

當數據庫具有電子郵件作爲空的,你可能會得到null響應。您在空引用上調用isEmpty()操作,結果爲NullPointerException

調用isEmpty()

實例之前執行null檢查:

if(email_address != null && email_address.isEmpty() == false) 
    { 
      //Send email using email address 
    } 
+0

謝謝:)這解決了我的問題:) – Matthew

+0

@Matthew:很高興它幫助。祝你好運。 – kosa

+0

非常感謝你:) – Matthew