源码:
try {
//System.out.print(""+name+" "+password);
DbConnect dc=new DbConnect();
ct=dc.getConnect();
String sql="select userpassword from users where username='"+name+"'";
ps=ct.prepareStatement(sql);
rs=ps.executeQuery();
System.out.println("sql语句: "+sql);
if(rs.next()) {
//用户名存在
String ps=rs.getString(1);
System.out.println("文本框传过来的密码: "+password);
System.out.println("数据库查询得到的密码: "+ps);
boolean b=password.equals(ps);
System.out.println("两个密码equals后的结果:"+b);
if(b) {
//密码匹配
isUser=true;
}
else isUser=false;
} else {
//用户名不存在
isUser=false;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeConnection();
}
return isUser;
}
运行结果:sql语句: select userpassword from users where username='xj'
文本框传过来的密码: xj
数据库查询得到的密码: xj
两个密码equals后的结果:false
try {
//System.out.print(""+name+" "+password);
DbConnect dc=new DbConnect();
ct=dc.getConnect();
String sql="select userpassword from users where username='"+name+"'";
ps=ct.prepareStatement(sql);
rs=ps.executeQuery();
System.out.println("sql语句: "+sql);
if(rs.next()) {
//用户名存在
String ps=rs.getString(1);
System.out.println("文本框传过来的密码: "+password);
System.out.println("数据库查询得到的密码: "+ps);
boolean b=password.equals(ps);
System.out.println("两个密码equals后的结果:"+b);
if(b) {
//密码匹配
isUser=true;
}
else isUser=false;
} else {
//用户名不存在
isUser=false;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeConnection();
}
return isUser;
}
运行结果:sql语句: select userpassword from users where username='xj'
文本框传过来的密码: xj
数据库查询得到的密码: xj
两个密码equals后的结果:false
System.out.println("数据库查询得到的密码: "+ps.length());
你用password.trim().equalsIgnoreCase(ps) 试试
确实是空格 归根结底是userpassword在数据库里面存取的类型是char 粗心啊
文本框传过来的密码: xj|
数据库查询得到的密码: xj |
应该是空格的问题
如果不相等的话,可以通过下面方法确认:
1.trim()下看看
2.把密码转换为byte,把byte的acsii码输出来,看看是否相等。
再或者就是用trim()去掉空格,试试吧!
一点小意见,有误请指正啊,呵呵、
这句话错了 它不应该跟结果比,而是应该跟结果中的密码比
b.setString(2).equals(password);