我已通过以下代码与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>");
}
我的程序始终显示结果“无效的登录详细信息”
答案 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(...)
添加参数值。