2016-06-15 1 views
-2

私はOracle 10g Xeデータベースと次のコードで接続しました。私のプログラムは "if"の部分には入っておらず、常に "else"の部分に入っています

Context ctx=new InitialContext(); 
DataSource ds=(DataSource)ctx.lookup("java:OracleDS"); 
Connection con=ds.getConnection(); 

String mob=request.getParameter("mob_no"); 
String pass=request.getParameter("pass"); 
Statement stmt=con.createStatement(); 

//checking login details 
String sql="select * from user1 where mob_no='"+mob+"' and password='"+pass+"'"; 
ResultSet rs=stmt.executeQuery(sql); 
String sql2="select * from postpaid where mob_no='"+mob+"'"; 
ResultSet rs2=stmt.executeQuery(sql2); 

if(rs.isBeforeFirst()) 
{ 
    while(rs2.next()) 
    { 
     if(rs2.getInt(2)!=0) 
     { 
      out.println("You have total due of "+rs2.getInt(2)); 
      out.println("<a href=\"paybill.jsp\">Pay Bill</a>"); 
     } 
     else { 
      out.println("You have no dues!!!!!"); 
     } 
    } 
} 
else 
{ 
    out.println("Invalid login details.....<a href=\"#\">Back to home page</a>"); 
} 

私のプログラムは、常にisBeforeFirst()のドキュメントが言う「無効なログインの詳細」

+0

私は常に「無効なログインの詳細」を出力します。 –

+1

ブラケットの書式を修正する必要があります –

+0

最初のクエリが結果を返すようにしてください。 – Sanjeev

答えて

0

を結果を示しています。カーソルが最初の行の前であればtrueを返します」

; false場合、カーソル他の位置にある場合または結果セットに行が含まれていない場合 "

この文脈では、falseはおそらく後者を意味します。つまり、最初のクエリで指定されたユーザーとパスワードと一致する行がないため、結果セットは空です。

UPDATE

私の答えは基本的に同じです。最後のelseブランチは、最初のクエリが行に一致しないために実行されます。

なぜですか?

私は推測できますが、代わりに、実行しているクエリのSQLを出力して、それらのステートメントが正しいものであることを確認することをお勧めします。注意すべき

もう一つは、このようなこと建物のクエリです:

String sql="select * from user1 where mob_no='"+mob+"' and password='"+pass+"'"; 

危険です。

String sql = "select * from user1 where mob_no = ? and password = ?"; 

とパラメータ値を追加するためにPreparedStatement.setString(...)を使用して:あなたはこのようにSQLでPreparedStatementを使用する必要があります

"foo' ; drop table user1 ;" 

:誰か、その値はこのようなものだったmob_no引数を指定して要求を送信したとします。

+0

私はコードでいくつかの訂正をしました....実際に私は間違って私が間違ったquestonを投稿した理由stackoverflow thatsの新しいです...私はこのサイトのインとアウトを知らない –

関連する問題