Java 我的程序没有进入“内部”;如果;部分,它总是在“中”;否则";部分

Java 我的程序没有进入“内部”;如果;部分,它总是在“中”;否则";部分,java,if-statement,jdbc,resultset,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"); Statem

我已经通过以下代码完成了与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>");
}
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup(“java:OracleDS”);
Connection con=ds.getConnection();
字符串mob=request.getParameter(“mob_no”);
字符串pass=request.getParameter(“pass”);
语句stmt=con.createStatement();
//检查登录详细信息
String sql=“从user1中选择*,其中mob_no='”+mob+“'和password='“+pass+””;
结果集rs=stmt.executeQuery(sql);
String sql2=“select*from postpaid,其中mob_no=”“+mob+”;
ResultSet rs2=stmt.executeQuery(sql2);
如果(rs.isBeforeFirst())
{
while(rs2.next())
{  
如果(rs2.getInt(2)!=0)
{
out.println(“您的总到期日为”+rs2.getInt(2));
out.println(“”);
}
否则{
out.println(“你没有应付账款!!!”;
}
}
}
其他的
{
out.println(“无效的登录详细信息…”);
}

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

isBeforeFirst()的文档说明:

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

在这种情况下,
false
很可能意味着后者;i、 e.您的结果集为空,因为没有行与第一次查询中提供的用户和密码匹配

更新

我的答案基本相同。由于第一个查询不匹配任何行,因此执行最后一个
else
分支

为什么?

我猜。。。但是,我建议您打印出正在执行的查询SQL,以确保语句是它们应该是的

另一件需要注意的事情是,构建如下查询:

  String sql="select * from user1 where mob_no='"+mob+"' and password='"+pass+"'";
  "foo' ; drop table user1 ;"
  String sql = "select * from user1 where mob_no = ? and password = ?";
是危险的。假设有人发送了一个带有
mob\u no
参数的请求,其值如下:

  String sql="select * from user1 where mob_no='"+mob+"' and password='"+pass+"'";
  "foo' ; drop table user1 ;"
  String sql = "select * from user1 where mob_no = ? and password = ?";
您应该将
PreparedStatement
与SQL一起使用,如下所示:

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

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

我总是得到“无效登录详细信息”的输出。你应该修复括号的格式确保你的第一个查询返回一些结果。哦,很抱歉括号的格式。。我只是粘贴了代码,没有检查我之前发布的代码是什么。我复制了粘贴错误的代码。这个新代码就是我遇到问题的代码。我已经在代码中做了一些更正…实际上我是stackoverflow新手,这就是为什么我错误地发布了错误的问题。。。我不知道这个网站的来龙去脉