我现在有点怀疑JDBC与数据库通讯时就有点失”失真“,可能没有用UNICODE/UTF8方式来传递数据,不知道怎么知道JDBC是否按UNICODE/UTF8方式来传数据。

解决方案 »

  1.   

    将rset.next(); 改成 rset.first();
    password=new String(rset.getString("password").getBytes("gb2312")); 改成 
    password=new String(rset.getString("password").getBytes("8859_1"),"GBK"); 不妨试试
      

  2.   

    rset.first();
    这条语句就出现异常。
    其实我用return getprototype(new String("?隹H?"));能得到正确的结果,正确的结果应该是:123321(getprototype方法返回传进去的密文的明文),但从数据库里取出的密文放到这里调用却得不到正确的结果,所以我想可能是从数据库到程序中的数据传递出了变化。
      

  3.   

    谁能解决?????????????????????help me!!!
      

  4.   

    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    这样就可以rset.first();了
    rset.getString(password);
    不需要转码,如果还是不行,请说明所用系统,语言。
      

  5.   

    OS:linux 7.0
    jdk1.2.2
    oracle 8.1.7.0.1
    oracle 字符集为:ZHS16CGB231280
      

  6.   

    直接这样取应该没问题了吧
    rset.getBytes("password")
      

  7.   

    用rset.getBytes("password")出现javax.servlet.ServletException: Invalid column type: getBytes异常
      

  8.   

    帮你顶下,
    既然return getprototype(new String("?隹H?"));能出现正确结果,就看你从数据库去出的password对不对了,调试一下吧,实在不行就多进行几次转换,看怎么转换正确。
    另外有没有可能你存进去的时候计算之前password的字符集有问题呢?
      

  9.   

    这两天我已经试遍大大小小的方法了,变字符集,变算法,变来变去最重要的地方也就是最简单的地方,从数据库取出的数据一放到程序的String变量里就变型了。