我是个java新手
今天在练习编写程序的时候出现错误了
请大家帮我看看,谢谢了!~~~ DB.java  public ResultSet Findsql(String sq){
            con=getConnection();
           try {
sql=con.createStatement();
res=sql.executeQuery(sq);

} catch (SQLException e) {
e.printStackTrace();
}  
           return res;
        }
    test.java
void finds() throws SQLException{
DB c=new DB();
ResultSet res=c.Findsql("select * from usereg where usename = 'wang'");
             if(!res.next()){
             System.out.println("查无此记录");
             }
             else{
              res.previous();
             while(res.next()){
         String idS=res.getString("ID");
         System.out.println(idS);
         }
            }
   }异常错误   Exception in thread "main" java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY
at sun.jdbc.odbc.JdbcOdbcResultSet.previous(Unknown Source)

解决方案 »

  1.   

    很明白了嘛,forward only,你不能.previous()
      

  2.   

    错误信息已经明确告诉你你的结果集是只能往前查看结果. 换句话说只能next().所以你调用previous的时候报错.
      

  3.   

    res.previous();
    你是想回到上一个是吧?上一个没东西嘛。
    还有你那个方法名开头字母最好小写。
    继续学习,加油!
      

  4.   

    那怎么配合
      if(!res.next()){
       System.out.println("查无此记录");
       }
     使用呢?
    去掉.previous()就会跳过第一个了。
      

  5.   

    createStatement()默认是不可以滚动的,如果需要回滚,使用下面的语句创建statement:
    stmt   =   con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);附一点我以前的学习资料:1.创建可滚动的ResultSet对象
              为了创建一个可滚动的ResultSet对象,需要使用creatStatement()方法的另外一种格式(注意,该格式只适用于JDBC2.0)。
               Statement createStatement(int resultSetType,int resultSetConcurrency)
                其中,具体的参数及说明如下:
                resultSetType
                            ResultSet.TYPE_FORWARD_ONLY
                            ResultSet.TYPE_SCROLL_INSENSITIVE
                            ResultSet.TYPE.SCROLL.SENSITIVE
                当使用ResultSet.TYPE_FORWARD_ONLY时(该属性为createStatement()默认属性)则表示产生一个只能前移的Result对象。而另外两种属性则可以实现游标在该结果集中的向前或向后移动。其中ResultSet.TYPE_SCROLL_INSENSITIVE对象不受事务对象底层数据库所做的修改。而另一个ResultSet.TYPE.SCROLL.SENSITIVE对象则可见事务对底层数据库的修改。
                ResultSetConcurrency
                            CONCUR_READ_ONLY
                            CONCUR_UPDATABLE
               CONCUR_UPDATABLE属性表示可以在结果集中修改和创建数据。
    2.使用游标在结果集中滚动的方法
               当设置了ResultSet.TYPE_SCROLL_INSENSITIVE或ResultSet.TYPE.SCROLL.SENSITIVE属性后,定义一个游标在结果集中的移动可以使用Result的如下的方法:
                Boolean preivoue()---移动到前一行
                Boolean first()---移动最初一行
                Boolean last()---移动到最后一行
                Boolean next()---移动到下一行
                Boolean absolute(int number)---转移第number行数据
                Boolean relative(int number)---从当前行开始移动number行
                Void afterlast()---移动到数据集底
                Void beforefirst()---移动到数据集的开始(注意和first()的区别)
                Boolean isFirsr()---判断是否为数据集中第一个数据
                Boolean isBeforeFirst()---判断是否为数据集的开始
                Boolean isLast()---判断是否为数据集的最后一个数据
                Boolean isAfterLast()---判断是否为数据集的最后
                Int getRow()---获得结果集的数目
                Void moveToInsertRow()---移动到一个用于结果集插入的特殊行
                Void moveToCurrentRow()---调离已插入行,回到数据集中待插入之前的行
    3.创建可更新的ResultSet对象
                首先查询数据库SQL必须满足如下的条件:
                *只引用单个的表
                *不含有一个join或者group by子句
                *选择主关键字作为那些列之一
                然后将Statement createStatement(int resultSetType,int resultSetConcurrency)中的int resultSetConcurrency 属性设置为CONCUR_UPDATABLE,这样就可以利用如下方法修改或者添加你的结果集中的数据了:
                updateString(),updateBoolean(),updateByte(),updateShort(),updateInt(),updateDatelong(),updateFloat(),
                updateFloat(),updateDouble(),updateBigDecimal(),updateBytes(),updateDate(),updateTime()
                updateTimeStamp(),updateAsciiStream(),updateCharacterStream(),updateBinaryStream(),updatedateNull()
                updateObject()
                在使用完如上方法之后,则需要调用相应的Result.insertRow(),或者Result.updateRow()方法以将插入或者修改存如数据库。 
      

  6.   

    加个boolean验证就是了String ids = null;while(res.next()){
       ids = res.getString("ID") ;
       System.out.println(ids) ;
    }
    if(ids==null) System.out.println("查无记录") ;//没有记录,ids不会被赋值
      

  7.   

      if(!res.next()){
      System.out.println("查无此记录");
      }既然查询出来没有1条记录 你还进行回滚有什么意义呢