0

サーブレットに次のコードがあります。

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サーバーはnullポインタ例外を表示します。

これを非難するのは間違いなくこれです:

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

何らかの理由で、ユーザーが電子メールを持っていない場合、この行は私に今説明したエラーを与えています。どうすればこの問題を解決できますか?

編集

getEmailメソッドは、エンティティクラスを作成するときに自動的に生成されます(私は永続性を使用しました)。

そのコードは次のとおりです。

public String getEmail() {
    return email;
}
4

1 に答える 1

4

問題はこの行だと思います:

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

データベースの電子メールが空の場合、null応答が返される可能性があります。isEmpty()null参照で操作を呼び出しているため、結果はNullPointerException

null電話する前に確認してくださいisEmpty()

例:

if(email_address != null && email_address.isEmpty() == false)
    {
          //Send email using email address
    }
于 2012-12-07T16:22:23.910 に答える