最近期末考试老师要求我们做一个论坛类型的网站,其中要实现用户的登录功能,之前搞过很多次了都没出什么问题,这一次不知道为什么程序中的sql表达式检索结果和MySQL中命令行检索的结果不一样了!!求助啊。。。个人怀疑是字符集的问题,但是把所有字符集都改成跟数据库的gbk相匹配还是不行。
下面是部分代码以及调试过程中的部分结果:
loginService类:
public boolean canLogin(String userName,String password) throws SQLException{
String sql = "select count(*) n from userinfo where userid = ? and userpswd = ?";
DbHelper dao = new DbHelper();
String[] param = {userName,password};
System.out.println("正在登陆的用户及密码:"+userName+","+password);
ResultSet rs = dao.runSelect(sql, param);
int n = 0;
while(rs.next()){
rs.getInt("n");
System.out.println("n="+n);
}
return n==1;
}
loginservlet类:有效代码全在doPost方法中
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("gbk");
response.setContentType("text/html;charset=gbk");
HttpSession session = request.getSession();
LoginService ls = new LoginService();
String userid = request.getParameter("userid");
String userpswd = request.getParameter("userpswd");
session.setAttribute("userid", userid);
try {
if(ls.canLogin(userid, userpswd)){
request.getRequestDispatcher("index.jsp").forward(request, response);
}else{
request.getRequestDispatcher("error.jsp").forward(request, response);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
login.jsp
<body>
<%
request.setCharacterEncoding("gbk");
response.setContentType("text/html;charset=gbk");
%>
<form action="loginServlet" method="post">
用户名:<input name="userid" type="text" /> <br />密码:<input
name="userpswd" type="password" /><br /> <input type="submit" />
</form>
</body>
求救。。。。
------解决方案--------------------
你给n赋值了么??你只是取出了这个值,但是并没有将值给变量n
------解决方案--------------------
你这个n是不是 count?
把你的sql 弄出来看看,严重怀疑是sql条件没有设置对
------解决方案--------------------
你想给count(*) 起个别名n, 想用n判断,这样是不可以的吧
最后可以 return “1”.equals(sql); 你试试
个人见解
------解决方案--------------------
=============================
int n = 0;
while(rs.next()){
rs.getInt("n");
System.out.println("n="+n);
}
===========================
1L对的N现在没值,
==============x修改后你试试===============
int n = 0;
while(rs.next()){
n= rs.getInt("n");
System.out.println("n="+n);
}
===========================
------解决方案--------------------
检查下SQL 还有n是否有给值
------解决方案--------------------
sq语句是没有问题的。楼主你看啊 。。在你java代码第七行的时候,你定义了n=0 ,但是在后面,n的值一直没有改变啊 。。所以。打印的一定会是0 啊。。然后Boolean返回的一定是false啊。 你要做的就是把第九行改成 n= rs.getInt("n"); ,,应该会没有问题的。
------解决方案--------------------
5楼找到原因了。
------解决方案--------------------
后面的应该都是没有问题的。你已经把用户名和密都取到了,并且数据库是 存在这数据的。。你就设个断点。一定要让它返回true才行啊 。。又因为返回true的条件是n=1 那你就检查n的值得问题啊 。再来看n 值得问题,在java代码中你虽然定义了n=0 ,但是n的值一直为0 ,(或许你也可以调试一下rs.getInt("n");的值是多少。),1肯定和0不等 啊。。最后返回必然是false 咯。你登录肯定是不行的啦。。
