没遇到过,换个驱动试试。
或者去掉一些代码看看:
stmt=conn.createStatement();
rs=stmt.executeQuery(sql); 
while(rs.next()) 
{
System.out.println(rs.getString("number"));
}

解决方案 »

  1.   

    我用这样的stmt 是有需要的。不能改。
      

  2.   

    把stmt=conn.createStatement();里的参数去掉
      

  3.   

    去掉rs.beforeFirst(); 就可以了。
      

  4.   

    rs.beforeFirst();好像在这里没有用。取得结果集后,游标的位置就是这里!先这样试试,看看能取出几条记录,然后再一步一步往回改!
    stmt=conn.createStatement();
    rs=stmt.executeQuery(sql); 
    while(rs.next()) 
    {
    System.out.println(rs.getString("number"));
    }
    不过,我想,这样也应该得到和你的代码一样的结果!!看看是不是数据库的问题!
      

  5.   

    Class.forName(driver);
    conn=DriverManager.getConnection(url,username,password);stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    rs=stmt.executeQuery(sql);//rs.beforeFirst();
     
    while(rs.next()) 
    {
    System.out.println(rs.getString("number"));
    }
      

  6.   

    把rs.beforeFirst()方法去掉,刚生成ResultSet时,游标的位置就是在此处,没必要,而且容易引起问题!在遍历完记录集后,需要再次用到同一个记录集的时候,再用rs.beforeFirst().
      

  7.   

    哈哈,我给出的是简化的代码,我的rs 确实在之前就被遍历过一次,所以需要 beforeFirst() 一下。之前的数据,除了最后一条,都被update 了一次,会不会是这个原因?现在就是循环的次数正确,可是最后一条记录,就是读不出来。
      

  8.   

    你的意思是从数据库里读出null,那也是读出值了不过值是null罢了。
      

  9.   

    之前的数据,除了最后一条,都是调用的rs.update()一次,因为我有一个字段需要重新赋值。
      

  10.   

    值肯定不是null,是有数值的。不过就是最后一条,任何的column 的值都读不出来。狂郁闷
      

  11.   

    我的rs 确实在之前就被遍历过一次,所以需要 beforeFirst() 一下。你认为这句话是因果关系?beforeFirst()方法是将数据指标移动到第一笔数据之前你完全可以不用写,既然"number"字段的前两行数据能读出来,只是第三条记录读不出来,原因一定出在数据库本身
      

  12.   

    我记得取得数据时可以用getInt()和getString()方法,你看看你第三条记录的参数("number")是不是另外一种格式?
      

  13.   

    “我的rs 确实在之前就被遍历过一次,所以需要 beforeFirst() 一下。”这没有因果关系吗?用rs.next()遍历一次,指针到rs 的最末尾,所以我需要beforeFirst(),把指针重新回头,这么使用,没有问题吧?
      

  14.   

    stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);如果你用的是org.gjt.mm.mysql这个驱动的话那么上面这语句里里的参数是不能用的!但如果没有里的参数又不能用结果集分页。你可以换成resin自带的驱动看看,到http://www.caucho.com/下载这个驱动。
      

  15.   

    我就不理解楼主所说的:"rs确实在之前就被历遍一次"是什么意思,rs.next()就是历遍的意思,怎么在之前还有历遍?stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    这代码已经说明这个数据库是可滚动和可修改的,你想用beforeFirst()来做什么呢?当然这样写法是没什么错误前两条记录可以正确读出,说明你的代码应该没有问题(至少从你贴出来的这段来说),还是去看看数据库吧
      

  16.   

    不是数据库的问题。我分析了一下,问题大概是这样。我有3条记录,先 while(rs.next){System.our.println("id");}//正常然后遍历,我把前两条的某一个字段rs.update()了一次再while(rs.next){System.our.println("id");}//结果循环的次数是正确的,可是在之前的遍历中,没有rs.update()的那条数据就读出为空有什么办法吗?
      

  17.   

    我发现我说错了,是rs.update()以后的那条数据,没有读出来,这是什么问题?
      

  18.   

    那你有没有试试把第三条记录的值,再原值rs.update()一次,rs.update()方法就是修改指定字段的值,是不是该字段所有行的记录全得修改,也就是说,当你使用rs.update()此方法后,它先把该字段的所有行的数据清空,再等着你赋值,这样你只更改了两条记录,第三条就仍为空值,呵呵~这只是我的分析。楼主可以试一下!
      

  19.   

    我是 rs.update();
         rs.updateRow();可能确实是象楼上说的问题,因为update会把该行数据的数据清空,可是updateRow(),不是已经赋新值了。难道还需要别的方法,把rs 重新得到一遍?
      

  20.   

    那根据你前面所说的,你只是把前两笔数据赋新值了吧 
    如果你用updateRow()方法也把第三笔数据赋新值了,我想它不会读不出来吧
    呵呵~