...statement = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = statement.excuteQuery("select * from " + tablename);
while(rs.next())
{
...
rs.deleteRow();//记录已经成功删除
...
}
..数据库是Sql Server2000,比如表中记录共有10行,我已经成功删除了1行,还剩9行,但是通过调试,发现rs走过第9行后,rs.next()仍然返回true!调试时显示rs.getRow()=10,在运行就出现错误java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3908)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5702)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:356)
at sun.jdbc.odbc.JdbcOdbcResultSet.getObject(JdbcOdbcResultSet.java:1680)
at DeleteRedundance.main(DeleteRedundance.java:60)郁闷了一下午,实在解决不了。。

解决方案 »

  1.   

    学生吗???只有学生才用resultset去记录集中操作数据库,建议你直接操纵数据库,看还会不会出问题
      

  2.   

    删除前,rs要走10行
    删除后,rs走9行如果删除后还是走10行,那就要到数据库去看看了,记录到底还在不在为什么不直接用DELETE语句删除呢
      

  3.   

    kubbye(小蛤蟆就是我) ( ) 信誉:100    Blog  2006-10-16 06:41:00  得分: 0  
     
     
       学生吗???只有学生才用resultset去记录集中操作数据库,建议你直接操纵数据库,看还会不会出问题
      
     
    --------------------------------------------------------------那应该怎么做啊
      

  4.   

    delete from table名字 where 你的条件
      

  5.   

    是这样的,因为数据库中有100多个表,而我发现表中有很多重复的记录,而所有的表竟然都没有主键(表都不是我设计的),我现在想用编程的方法来删除重复的记录,所有才用到了resultset,直接操作数据库要对这100个表修改,我觉得太麻烦,我也用过了sql语句:
      select distinct * into #Tmp from tableName 
      drop table tableName 
      select * into tableName from #Tmp 
      drop table #Tmp 
    这样可以删除重复的记录,但是问题是很多表里有text类型的字段,distinct不能作用与该类型,所以上述办法不能完全起作用,不知大家还有什么好办法?
      

  6.   

    若用delete语句,where的条件我不知道应该怎么写。。
      

  7.   

    建议下次查之前,把rs close一下
      

  8.   

    数据库commit了没?或者再执行一次ResultSet rs = statement.excuteQuery("select * from " + tablename);再取一次ResultSet试试。
    不过最好还是建议直接用DELETE语句删:DELETE mytable WHERE first_column=‘Delete Me’
      

  9.   

    呵呵,这个挺有意思学生吗???只有学生才用resultset去记录集中操作数据库,建议你直接操纵数据库,看还会不会出问题我想问下kubbye(小蛤蟆就是我),为什么就说楼主是学生呢
      

  10.   

    顺便说一下,本人也从来没有用过rs.delete的方法,呵呵
    个人感觉,你看看java doc关于这方面的介绍,或许是你的JDBC驱动程序本身就不支持
      

  11.   

    我都觉得很有意思,他怎么知道我是学生!
    我也知道直接写SQL语句操纵数据库比较好,但是我想不出怎么写啊
    没想到用ResultSet遇到这么多问题,原来以为很简单的一个程序
      

  12.   

    你删除记录总有个条件吧,把条件写到SQL里面去执行就是了。
      

  13.   

    xiangbo520(充栋汗牛) ( ) 信誉:107    Blog  2006-10-18 00:32:00  得分: 0  
     
     
       你删除记录总有个条件吧,把条件写到SQL里面去执行就是了。
      
     
    在8楼我说过了情况了,就是因为where条件写不出来,才想到用编程的方法的