System.out.println(u);//能打印出u的值,是中文,不是? 不要再建议我把u先转换成gb2312咯
rs=sm.executeQuery("select passwd from users where username='"+u+"'");
//查询语句没问题,在数据库中能执行,并且能查询出中文用户名对应的密码
System.out.println(rs.next());// 打印false
1:问题在这,为什么rs没有接收到查询返回的结果
2:就像一个语句:int a=10; 然后我执行System.out.println(a)时它不打印10却打印出null
3:这是登陆验证的处理,业务逻辑没问题,因为当u是英文用户名的时候,能正确运行.
System.out.println(rs.next());也能打印出true. 换成中文时就不行了

解决方案 »

  1.   

    select passwd from users where username='' 这个语句你在数据库中能查出数据? 但是到程序中有可能变成乱码了,所以没查出来,就不能执行rs.next  建议你换成中文调试一下,看看u显示的值是不是乱码,如果是乱码那你就得转换了。
      

  2.   

    数据库的编码和页面一致么,你确保select passwd from users where username=''能查出数据?调试跟踪rs的值是什么
      

  3.   


    数据库和所有jsp页面  还有servlet都用的gb2312
    那个数据库查询语言  确实能查出来.          rs的值?  应该是没有的吧  不然为什么rs.next() 和rs.first() 都是空呢
      

  4.   

    可能是你的数据库的编码有问题,改成utf-8或者gbk
      

  5.   

    建议统一都用 utf-8 的
      

  6.   

    首先你select查询出来的中文结果在SQL里执行是否能得到数据?
      

  7.   


    没有空格   而且用trim()处理过了
      

  8.   

    select passwd from users where username='' 这个语句你在数据库中能查出数据? 但是到程序中有可能变成乱码了,所以没查出来,就不能执行rs.next 建议你换成中文调试一下,看看u显示的值是不是乱码,如果是乱码那你就得转换了。
      

  9.   

    同志,是不是你输得汉字不在gb2312的范围内?
    建议你用Byte的那个88591