我的程序不会进入“if”部分,它总是进入“else”部分

时间:2016-06-15 07:26:08

标签: java if-statement jdbc resultset

我已通过以下代码与Oracle 10g Xe数据库建立了连接。

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>");
}

我的程序始终显示结果“无效的登录详细信息”

1 个答案:

答案 0 :(得分:0)

isBeforeFirst()的文档说:

  

“如果光标位于第一行之前,则返回true;如果光标位于任何其他位置或结果集不包含行,则返回false。” p>

在这种情况下,false最有可能意味着后者;即结果集为空,因为在第一个查询中没有行与提供的用户和密码匹配。

<强>更新

我的答案基本相同。最后的else分支被采用,因为第一个查询不匹配任何行。

为什么呢?

我可以猜测......但是,我建议你打印出你正在执行的查询SQL,以确保这些语句是他们应该的。

需要注意的另一件事是建立这样的查询:

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

危险。假设有人发送了一个mob_no参数的请求,其值如下:

  "foo' ; drop table user1 ;"

你应该像这样使用PreparedStatement和SQL:

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

并使用PreparedStatement.setString(...)添加参数值。