......
   String distination =request.getParameter("distination");
   byte[] tmp = distination.getBytes("ISO-8859-1");
   distination = new String(tmp,"GB2312");
   .......
   String SqlQue="select ad.addressName ,sw.sendName, wp.price from  sendWay sw ,weighprice wp , address ad "+"where wp.ranDn <"+ taxweig + " and wp.ranUp >" + taxweig +" and ad.addressName = '"+ distination+"' and ad.addressid = sw.addressid and sw.sendid = wp.sendid";
   rs = stmt.executeQuery(SqlQue);
   我经过调试后发现导致rs为空的原因是where字段中条件ad.addressName = '"+ distination+"'不成立.我看了数据库表中的addressName字段值和distination的值都是"济南".如果我把"济南"都该为
"111",则rs不为空.这是什么原因呢?望指教!

解决方案 »

  1.   

    distination是页面上的值吧,为什么转来转去的?直接用不行么?我做的日文的完全可以在页面上取出来直接用......
       String distination =request.getParameter("distination");
    //   byte[] tmp = distination.getBytes("ISO-8859-1");
    //   distination = new String(tmp,"GB2312");
       .......
       String SqlQue="select ad.addressName ,sw.sendName, wp.price from  sendWay sw ,weighprice wp , address ad "+"where wp.ranDn <"+ taxweig + " and wp.ranUp >" + taxweig +" and ad.addressName = '"+ distination+"' and ad.addressid = sw.addressid and sw.sendid = wp.sendid";
       rs = stmt.executeQuery(SqlQue);
      

  2.   

    你三条语句:String distination =request.getParameter("distination");
       byte[] tmp = distination.getBytes("ISO-8859-1");
       distination = new String(tmp,"GB2312");
    可以写成一条:String distination = new String(request.getParameter("distination").getBytes("ISO-8859-1"));
    你再把这个distination打印到后台看看,我是觉得你的distination = new String(tmp,"GB2312");这条语句有点问题,你再试试.
      

  3.   

    String distination =request.getParameter("distination");
    //   byte[] tmp = distination.getBytes("ISO-8859-1");
    //   distination = new String(tmp,"GB2312");  我如果不进行编码转换,那么在页面上显示的是一串问号。
    我从数据库中取出的中文如果不进行编码转换,显示时也是乱码。
      

  4.   

    这肯定要编码转换的,
    不知道你在页面上面设置了<% page language="java" contentType="text/html;charset=gb2312" import="java.utio.*,java.sql.*"%>
    你获取distination之后,打印一下,看是不是还是中文,
    之后,你再在后台打印你执行的SqlQue是怎样的,放到SQL查询分析器中能不能执行,
    这个打印放在ResultSet rs = stat.executeQuery(SqlQue);前面就行.
    你把distination和SqlQue放到网上来,我看看是不是语句的问题.我要后台打印的结果.
      

  5.   

    同意xingfo(一江涛水)说得,你试试看吧,应该可以得还有看看数据库创建的时候字符集是什么?
      

  6.   

    你三条语句:String distination =request.getParameter("distination");
       byte[] tmp = distination.getBytes("ISO-8859-1");
       distination = new String(tmp,"GB2312");
    可以写成一条:String distination = new String(request.getParameter("distination").getBytes("ISO-8859-1"));
    你再把这个distination打印到后台看看,我是觉得你的distination = new String(tmp,"GB2312");这条语句有点问题,你再试试.                                   正解
      

  7.   

    distination和SqlQue后台打印的结果:
    济南
    select ad.addressName ,sw.sendName, wp.price from  sendWay sw ,weighprice wp , address ad where wp.ranDn <668.0 and wp.ranUp >668.0 and ad.addressName = '济南' and ad.addressid = sw.addressid and sw.sendid = wp.sendid
    在mysql中执行SqlQue语句后的结果:
    mysql> select ad.addressName ,sw.sendName, wp.price from  sendWay sw ,weighprice
     wp , address ad where wp.ranDn <668.0 and wp.ranUp >668.0 and ad.addressName =
    '济南' and ad.addressid = sw.addressid and sw.sendid = wp.sendid
        -> ;
    +-------------+----------+-------+
    | addressName | sendName | price |
    +-------------+----------+-------+
    | 济南        | 经济价格 |   1.1 |
    | 济南        | 一天到门 |   2.6 |
    | 济南        | 两天到门 |   2.6 |
    | 济南        | 三天到门 |   1.1 |
    | 济南        | 四天到门 |   1.1 |
    | 济南        | 五天到门 |   1.1 |
    +-------------+----------+-------+
    6 rows in set (0.17 sec)
      

  8.   

    看你打印的结果,可以肯定你的查询语句没有错误,可能是你要读取结果集的代码写错了.
    rs = stmt.executeQuery(SqlQue);
    你下面就可以把他读取出来.
    String addressName = "";
    ....
    if(rs.next())
    {
      while(rs.next())
      {
         addressName = rs.getString(1).trim();
         .......
      }
    }
    else
    {
    System.out.println("没有记录!");
    }
    你再看看代码,感觉应该不是你传值到数据库中查询的问题.感觉蛮有逻辑的,不是很复杂.
    实在不行,你就在关键的地方加打印,看那条语句执行于否,这也是一个自己测试的方法.祝你好运.