日期:2014-05-17  浏览次数:20708 次

求:高手指点一个登录数据库验证问题!
做了个登录验证模块,用户名和密码为英文是能够通过验证,可是用户名为中文密码为英文时却无法通过,求有经验的高手指点一下:数据库用的是mysql,关于中文显示的问题,已经做过转码处理,去空格也做过处理了,可还是不行,不知道怎么回事?代码如下:
public boolean checkUser(User user){
boolean flag =false;
DBCon db=new DBCon();
System.out.println("user:"+user.getUsername()+" "+user.getPassword());
String sql="select * from users where username='"+user.getUsername()+"' and password='"+user.getPassword()+"'";
System.out.println("sql:"+sql);
try {
con=db.getConnection();
stm=con.createStatement();
rs=stm.executeQuery(sql);
if(rs.next()){
flag=true;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.closeDB();
}
return flag;
}
例如:用户名为admin,密码为admin时,控制台显示
select * from users where username='admin' and password='admin'且能够通过验证。
用户名为管理员,密码为admin时,控制台显示 
select * from users where username='管理员' and password='admin'就不能通过验证,但是该sql在数据库能查询到数据。
不知道是什么原因?

------解决方案--------------------
那就是你的数据库问题了
------解决方案--------------------
mysql命令行,执行 show variables like '%char%',看看你的数据库编码。
然后,在你的db连接字符串,变为:
"jdbc:mysql://localhost:3306/test?characterEncoding=utf8"
其中utf8对应为你的server编码
------解决方案--------------------
数据库的编码不是中文的吧?