我在查询数据库中使用ResultSet,先贴上代码片段ArrayList aListQueryResult = new ArrayList();ResultSet rs = stmt.executeQuery(sql);
Postalcode postalcode = new Postalcode();while(rs.next()) {
System.out.println("-----------数据库数据记录-----------");
postalcode.setStrPostalcode(rs.getString("Postalcode"));
postalcode.setStrDistrictName(rs.getString("District"));
postalcode.setStrDistrictNum(rs.getString("DistrictNum"));
postalcode.setStrProvinceName(rs.getString("Province"));
aListQueryResult.add(postalcode);
}
这个是查询邮编数据库的代码,现在的问题是,当我查询一些数据,如果数据库应经有相关的数据记录,如数据库中已经有南京的一些信息了,查询结果淡然就返回了从数据库中查询的关于南京的信息了,问题就出在当我查询一些数据库中没有的信息数据时,返回的竟然还是上次数据库查询结果的数据,比如上次查询南京的数据,则返回数据库中的南京相关记录,这次查询上海的信息,(数据库中没有上海的信息),奇妙的是返回的信息还是南京的信息,怎么回事?怎么解决啊?高手们请作答

解决方案 »

  1.   

    这太奇了。
    我觉得应该不是ResultSet的问题,肯定是你别的地方搞错了。
      

  2.   

    ResultSet如果有这么神奇的问题。那就太神奇了。。
      

  3.   

    问题一:
    while(rs.next()) {
    System.out.println("-----------数据库数据记录-----------");
                    postalcode.setStrPostalcode(rs.getString("Postalcode"));
                    postalcode.setStrDistrictName(rs.getString("District"));
                    postalcode.setStrDistrictNum(rs.getString("DistrictNum"));
                    postalcode.setStrProvinceName(rs.getString("Province"));
                    aListQueryResult.add(postalcode);
                }
    Postalcode postalcode = new Postalcode();应该放在循环里new
      

  4.   

    小弟快崩溃了,谁能给个提示一下是数据库 查询方法 public ArrayList executeQuery(String strQueryCond) { //strQueryCond:查询条件
    this.openConnection();
    ArrayList aListQueryResult = null;
    try {
    String sql = null;
    //声明SQL语句
    Statement stmt = conn.createStatement();
    if(QUERYMODE==QueryMode.DISTRICT_to_POSTAL) { //按地区名查询邮编
    sql="SELECT Province,District,Postalcode,DistrictNum FROM postalcode_china WHERE District LIKE '%"  + strQueryCond + "%'";
    }
    else if(QUERYMODE==QueryMode.POSTAL_to_DISTRICT) { //按邮编查询地区名
    sql="SELECT Province,District,Postalcode,DistrictNum FROM postalcode_china WHERE Postalcode LIKE '%"  + strQueryCond + "%'";
    }

    //执行查询语句
    aListQueryResult = new ArrayList();
    ResultSet rs = stmt.executeQuery(sql);
    while(rs.next()) {
    Postalcode postalcode = new Postalcode();
    postalcode.setStrPostalcode(rs.getString("Postalcode")); postalcode.setStrDistrictName(rs.getString("District"));
    postalcode.setStrDistrictNum(rs.getString("DistrictNum"));
    postalcode.setStrProvinceName(rs.getString("Province"));
    aListQueryResult.add(postalcode);
    }

    } catch(Exception e) {
    e.printStackTrace();
    } finally {
    this.closeConnection();
    }
    return aListQueryResult;
    }
      

  5.   

    为什么结果集和会话都没有关闭呢?一定要关闭结果集(ResultSet)和会话(Statement)按这个顺序
    rs.close();
    st.close();
    conn.close();
      

  6.   

    this.closeConnection()方法都释放了什么?
    具体的实现贴出来
    另外可以将sql先在数据库里执行看看结果 
    查询都有的,比如南京、北京都有记录,分别查询看下结果有什么异常
      

  7.   

    怀疑不是数据库查询有问题,而是你显示的有问题。
    返回之前把list循环打印一下,看看结果如何
      

  8.   

    很怀疑你是把查询的结果放到session里了, 当查询的结果为空的时候你没有重新给所绑定的键 赋值,还是保留着其中年一次查询的值;(不知道你是否有用到显示页面····~·O(∩_∩)O~)
      

  9.   

    如果是在Action 里调用了你所列的方法,那基本上就是上面所说的问题了·
      

  10.   

    我这个服务器端的程序大体机构是:servlet接收客户端的查询请求信息-->servlet调用DAO数据库查询类-->DAO数据库查询类将查询结果放置在一个bean类postalcode中-->servlet类取出postalcode类中的相关值再发送给客户端。我目前感觉问题就出在这个DAO类中
      

  11.   

    executeQuery前将sql字符串打印一下
    查询完成后return前将ArrayList打印一下
    基本上就知道问题出在三块中哪一块了
      

  12.   

    应该其他地方出得问题,如果没有结果那aListQueryResult = new ArrayList();应该没有内容才对
      

  13.   

    1. 把问题分开排查,从数据库取出结果后先在后台打印一下,看看有没有重的,如果没有就说明查询这块没有问题。
    2. 再在servlet里判断一下返回值是否为空。
    3. 对比一下后台打印出来的结果与页面显示的是否一致,如果不一致就检查一下缓存。
     while(rs.next()) {
        Postalcode postalcode = new Postalcode();
        postalcode.setStrPostalcode(rs.getString("Postalcode"));    postalcode.setStrDistrictName(rs.getString("District"));
        postalcode.setStrDistrictNum(rs.getString("DistrictNum"));
        postalcode.setStrProvinceName(rs.getString("Province"));
        aListQueryResult.add(postalcode);    System.out.println(postalcode.getStrPostalcode());
        System.out.println(postalcode.getStrDistrictName());
        System.out.println(postalcode.getStrDistrictNum());
        System.out.println(postalcode.getStrProvinceName());}
      

  14.   

    把 Postalcode postalcode = new Postalcode(); 放在while循环中
      

  15.   

    楼主,就你给的代码,感觉看不出什么问题,像你所提的,如果某个地方如上海没有相关信息的也打印出来的,可能是你显示的jsp页面有问题咯,查看一下这个页面是不是使用缓存?(页面的级别应该为request,即每次查询都重新填充页面记录)。jsp页面好像有这个页面的设置呵呵,好久没搞过jsp,lz仔细点检查一下吧