代码片断:
stmt=Conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE);
String sqlsubstr = "select * from street where AreaID=" + 1;
Rs=stmt.executeQuery(sqlsubstr);
try{
    while(Rs.next()){
      Rs.deleteRow();
    }
}catch(Exception e){
  System.out.print(e.toString());
}
为什么不能完全清除AreaID等于1的记录,总是隔一个删除一个.请大家帮一下忙?别使用sql语句和使用记录集哪一个效率更高呢?

解决方案 »

  1.   

    while(Rs.next()){
    Rs.deleteRow();
    }
    =============
    这样工作的:删除当前行,指针移到下一行,再Rs.next()指针移到下下一行,于是错过了一行sql语句效率高
      

  2.   

    但是我使用这样的语句也不行啊:
    Rs.next
    try{
        while(!Rs.isLastAfter){
          Rs.deleteRow();
          Rs.next;
        }
    }catch(Exception e){
      System.out.print(e.toString());
    }
      

  3.   

    不不应该是这样:
    Rs.next;
    try{
        while(!Rs.isLastAfter){
          Rs.deleteRow();
        }
    }catch(Exception e){
      System.out.print(e.toString());
    }
      

  4.   

    当然使用sql语句效率高……rs.deleteRow()删除当前行,比如说有3条记录,编号1,2,3rs.next(),指针指向第一行,即记录1
    rs.deleteRow(),删除记录1
    rs.next(),指针指向第二行,即记录3
    …………
    …………
    最后记录2的记录仍然存在……
      

  5.   

    那楼上的意思是我用如下的代码可以实现:
    Rs=stmt.executeQuery(sqlsubstr);
    Rs.next;
    try{
        while(!Rs.isAfterLast()){
          Rs.deleteRow();
        }
    }catch(Exception e){
      System.out.print(e.toString());
    }
    你的意思是Rs.deleteRow();在删除第一个记录会,自动指向了第二行,既第二条记录是吗?
    但是我试了之后,只删除了第一条记录.不知道这是怎么回事呢?
      

  6.   

    很奇怪,这样试试:
    stmt=Conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    ...
    while (Rs.first()) {
    Rs.deleteRow();
    }