现在小弟遇到如下问题。现在我想逐行检查数据库记录。当某个记录值为0时,让当前值更新为上一行记录的非零值。如:数据库记录如下
1 2001 99
2 2002 70
3 2003  0

这个时侯逐行检查到第三行2003记录时第三个字段的值为0.这时需要让它更新为2002年的70。代码如下,使用access数据库。该怎么更新,才能更新当前行?
ResultSet rs = getUpdate.executeQuery("select dyhdl from nfdlb");
n1=0;
while(rs.next()){
   n=rs.getFloat("dyhdl");
   if(n==0){
        getUpdate.executeUpdate("update nfdlb set dyhdl="+n1);
   }
   n1=n;
}
就是这句查询语句不会写。请各位前辈指教!如果能写出直接调用上一行的语句将更加感激不尽!

解决方案 »

  1.   

    access数据库..没用过 不知道支持结果集回滚不..支持的话可以用rs.previous()
      

  2.   

    再定义一个结果集rsTemp
    n不为0时,将rs.next()传给rsTemp
    n为0时,rsTemp不变
    最后返回rsTemp
      

  3.   

    ResultSet rs = getUpdate.executeQuery("select id,dyhdl from nfdlb"); getUpdate.executeUpdate("update nfdlb set dyhdl="+n1 +"where id ="+rs.getInt("id")); 需要在多查询一列来确定更新当前行。
      

  4.   

    比较笨的办法就是再设2各变量,分别保存不为0的dyhdl值,以及主键的值
    碰到dyhdl为0的时候就可以用这两个变量去更新了ResultSet rs = getUpdate.executeQuery("select dyhdl from nfdlb"); 
    n1=0; 
    strPk="";
    while(rs.next()){ 
      strPk = rs.getString("pk"); 
      n=rs.getFloat("dyhdl"); 
      if(n==0){ 
            getUpdate.executeUpdate("update nfdlb set dyhdl="+n1+ "where pk="+strPk); 
      } else {
            n1 = n;
      }

      

  5.   

    只要有KEY就可以写了UPDATE   nfdlb   SET    
      dyhdl   =   (SELECT   TOP   1   dyhdl   FROM   nfdlb   A   WHERE   A.ID   <   nfdlb.ID   ORDER   BY   ID   DESC)   不然的话就只有定义个变量每次去保存上一次SQL文检索出来的值,再更新
      

  6.   

    ResultSet rs = getUpdate.executeQuery("select dyhdl from nfdlb"); 
    n1=0; 
    while(rs.next()){ 
      n=rs.getFloat("dyhdl"); 
      if(n==0){ 
            rs.previous();//将指标上移一行
            getUpdate.executeUpdate("update nfdlb set dyhdl="+n1 +"where id="+(rs.getInt(1)+1)); 
      } 
      n1=n; 

     
      

  7.   

    ResultSet rs = getUpdate.executeQuery("select id,dyhdl from nfdlb");getUpdate.executeUpdate("update nfdlb set dyhdl="+n1 +"where id ="+rs.getInt("id"));需要在多查询一列来确定更新当前行。