我用的是SQL   Server   for   JDBC驱动程序 
其中一句话有问题
假设我有个记录集,有数据
if (this_rs!=null)
{
while(this_rs.next()){
    System.out.print(this_rs.getString(1));
}
}
这个没有问题,可是给他移到记录首的时候就有问题了try{
this_rs.first();
}
catch(SQLException e)
{
System.out.print(e.toString());
}出现
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.first 
怎么会这样的?请高手给个答案

解决方案 »

  1.   

    这样创建Statement:
    Connection conn;
    Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);
      

  2.   

    呵呵,没仔细看书,刚才在网上搜到的,供大家参考createStatement参数解释 createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);参数解释(来自ibm) 
     
    用缺省设置创建时,ResultSet 是一种只能访问一次(one-time-through)、只能向前访问(forward-only)和只读的对象。您只能访问数据一次,如果再次需要该数据,必须重新查询数据库。然而,并不只有这一种方式。通过设置 Statement 对象上的参数,您可以控制它产生的 ResultSet。例如:...
             Class.forName(driverName);
             db = DriverManager.getConnection(connectURL);
             Statement statement = db.createStatement(
                                ResultSet.TYPE_SCROLL_SENSITIVE,
                                                      ResultSet.CONCUR_UPDATABLE
                            );         
             
             String orderElName = xmlfileEl.getElementsByTagName("order").item(0)
                                           .getFirstChild().getNodeValue();
    ...这个 Statement 现在将产生可以更新并将应用其他数据库用户所作更改的 ResultSet。您还可以在这个 ResultSet 中向前和向后移动。第一个参数指定 ResultSet 的类型。其选项有:TYPE_FORWARD_ONLY:缺省类型。只允许向前访问一次,并且不会受到其他用户对该数据库所作更改的影响。 
    TYPE_SCROLL_INSENSITIVE:允许在列表中向前或向后移动,甚至可以进行特定定位,例如移至列表中的第四个记录或者从当前位置向后移动两个记录。不会受到其他用户对该数据库所作更改的影响。 
    TYPE_SCROLL_SENSITIVE:象 TYPE_SCROLL_INSENSITIVE 一样,允许在记录中定位。这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录,那个记录将从 ResultSet 中消失。类似的,对数据值的更改也将反映在 ResultSet 中。 
    第二个参数设置 ResultSet 的并发性,该参数确定是否可以更新 ResultSet。其选项有:CONCUR_READ_ONLY:这是缺省值,指定不可以更新 ResultSet 
    CONCUR_UPDATABLE:指定可以更新 ResultSet