2017-01-10 7 views
-2

データベースにデータを入れ、htmlページからデータベース内のデータを検索するアプリケーションを作成しようとしています。私はサーブレットAPIを使用しています、私は正常にデータベースからデータを取得しますが、データベースに存在しないデータについては、同じhtmlページに "data not found"メッセージを取得する必要があります。私はデータベースのデータをチェックするための条件を書いていますが、データベースに存在しないデータの場合、 "NULLポインタ例外"のエラーメッセージが表示され、whileループはデータベース内のすべてのデータをチェックした後、データベース内にユーザーデータが見つからない場合、whileループを解除する方法

// this while loop doesn't terminate by itself if the data is not found in the database. 

int flag=0; 
while(rs.next()){ 
    if (rs.getString(1).equals(fname)&&(rs.getString(2).equals(lname))) 
    { 
     String message=rs.getString(4); 
     out.print("<h2 align='center'>"+message+"</h2>"); 
     RequestDispatcher disp = req.getRequestDispatcher("/index.html"); 
     disp.include(req,res); 
     flag=1; 
    } 
} 

if(flag==0) 
{ 
    out.print("<h1>"+"data not found"+"</h1>"); 
    RequestDispatcher disp = req.getRequestDispatcher("/index.html"); 
    disp.include(req,res); 
    System.out.println(flag);   
} 
} 
+2

'break'ステートメントを使用しますか? – Mena

+0

@Menaは、 'System.out.println(flag);の後に' break; 'を追加しました; – Null

+1

ループを中断する必要はありません。データがない場合、 'rs.next()'は決して真ではありません。あなたのコード中の余分な '}'がメソッドの終わりである場合、最初の 'disp.include'呼び出しの後に戻り、フラグを冗長にしたいと思うかもしれません。 NPEを取得している場合は、おそらくループの中で比較している2つの列の値のうちの1つが、実際にはヌルです(複数の行がある可能性があります)。 NPEはどのラインを報告していますか? (また、多くのデータを取得してからJavaをチェックするのではなく、指定したfname/lnameを検索するフィルタをクエリに追加しないでください) –

答えて

0

あなたは最初のnullでないかどうかを確認し、変数に値を割り当てる必要があります。

String tmp = rs.getString(1); 
     if (tmp != null && tmp.equals(fname) && tmp.equals(lname)) {...} 
関連する問題