新的记录集接口(ResultSet 接口)
在JDBC API 2.0 中ResultSet 接口有了很大的变化增加了很多行操作行定位的新
方法功能也强大许多最主要的变化有以下几方面
1 新定义了若干个常数
这些常数用于指定ResultSet 的类型游标移动的方向等性质如下所示
public static final int FETCH_FORWARD;
public static final int FETCH_REVERSE;
public static final int FETCH_UNKNOWN;
public static final int TYPE_FORWARD_ONLY;
public static final int TYPE_SCROLL_INSENSITIVE;
public static final int TYPE_SCROLL_SENSITIVE;
public static final int CONCUR_READ_ONLY;
public static final int CONCUR_UPDATABLE;
FETCH_FORWORD 该常数的作用是指定处理记录集中行的顺序是由前到后即从
第一行开始处理一直到最后一行
FETCH_REVERSE 该常数的作用是指定处理记录集中行的顺序是由后到前即从最
后一行开始处理一直到第一行
FETCH_UNKNOWN 该常数的作用是不指定处理记录集中行的顺序由JDBC 驱动程序和数据库系统决定
TYPE_FORWARD_ONLY 该常数的作用是指定数据库游标的移动方向是向前不允
许向后移动即只能使用ResultSet 接口的next()方法而不能使用previous()方法否则会
产生错误
TYPE_SCROLL_INSENSITIVE 该常数的作用是指定数据库游标可以在记录集中前后
移动并且当前数据库用户获取的记录集对其他用户的操作不敏感就是说当前用户正
在浏览记录集中的数据与此同时其他用户更新了数据库中的数据但是当前用户所获
取的记录集中的数据不会受到任何影响
TYPE_SCROLL_SENSITIVE 该常数的作用是指定数据库游标可以在记录集中前后移
动并且当前数据库用户获取的记录集对其他用户的操作敏感就是说当前用户正在浏
览记录集但是其它用户的操作使数据库中的数据发生了变化当前用户所获取的记录集
中的数据也会同步发生变化这样有可能会导致非常严重的错误产生建议慎重使用该常

CONCUR_READ_ONLY 该常数的作用是指定当前记录集的协作方式(concurrency
mode)为只读一旦使用了这个常数那么用户就不可以更新记录集中的数据
CONCUR_UPDATABLE 该常数的作用是指定当前记录集的协作方式(concurrency
mode)为可以更新一旦使用了这个常数那么用户就可以使用updateXXX()等方法更新记
录集中的数据
在JSP/Servlet 程序中如何使用这些预定义的常数呢?这是读者很关心的问题在9.2.2
节中将有介绍
2 ResultSet 接口提供了一整套的定位方法
这些可以在记录集中定位到任意一行具体有
public boolean absolute(int row); 该方法的作用是将记录集中的某一行设定为当前
行亦即将数据库游标移动到指定的行参数row 指定了目标行的行号这是绝对的行号
由记录集的第一行开始计算不是相对的行号
public boolean relative(int rows); 该方法的作用也是将记录集中的某一行设定为当
前行但是它的参数rows 表示目标行相对于当前行的行号例如当前行是第3 行现在需
要移动到第5 行去既可以使用absolute()方法也可以使用relative()方法代码如下

rs.absolute(5);
或者
rs.relative(2);
其中rs 代表ResultSet 接口的实例对象
又如当前行是第5 行需要移动到第3 行去代码如下

rs.absolute(3);
或者
rs.relative(-2);
其中rs 代表ResultSet 接口的实例对象
读者需要注意的问题是传递给relative()方法的参数如果是正数那么数据库游标
向前移动如果是负数那么数据库游标向后移动
注意在本章中所说的数据库游标向前移动是指向行号增大的方向移动向后移动是
指向行号减少的方向移动
public boolean first(); 该方法的作用是将当前行定位到数据库记录集的第一行
public boolean last(); 该方法的作用刚好和first()方法相反是将当前行定位到数据
库记录集的最后一行
public boolean isFirst(); 该方法的作用是检查当前行是否记录集的第一行如果是
返回true 否则返回false
public boolean isLast(); 该方法的作用是检查当前行是否记录集的最后一行如果
是返回true 否则返回false
public void afterLast(); 该方法的作用是将数据库游标移到记录集的最后位于记录
集最后一行的后面如果该记录集不包含任何的行该方法不产生作用
public void beforeFirst(); 该方法的作用是将数据库游标移到记录集的最前面位于
记录集第一行的前面如果记录集不包含任何的行该方法不产生作用
public boolean isAfterLast(); 该方法检查数据库游标是否处于记录集的最后面如果
是返回true 否则返回false
public boolean isBeforeFirst(); 该方法检查数据库游标是否处于记录集的最前面如
果是返回true 否则返回false
public boolean next(); 该方法的作用是将数据库游标向前移动一位使得下一行成为
当前行当刚刚打开记录集对象时数据库游标的位置在记录集的最前面第一次使用next()
方法将会使数据库游标定位到记录集的第一行第二次使用next()方法将会使数据库游
标定位到记录集的第二行以此类推
注意如果在当前行打开了一个输入流(Input Stream) 那么再次使用next()方法时
将会自动关闭该输入流
public boolean previous(); 该方法的作用是将数据库游标向后移动一位使得上一行
成为当前行
public boolean rowDeleted(); 如果当前记录集的某行被删除了那么记录集中将会留
出一个空位调用rowDeleted()方法如果探测到空位的存在那么就返回true 如果没有
探测到空位的存在就返回false 值
public boolean rowInserted(); 如果当前记录集中插入了一个新行该方法将返回
true 否则返回false
public boolean rowUpdated(); 如果当前记录集的当前行的数据被更新该方法返回
true 否则返回false
public void insertRow(); 该方法将执行插入一个新行到当前记录集的操作
public void updateRow(); 该方法将更新当前记录集当前行的数据
public void deleteRow(); 该方法将删除当前记录集的当前行
public void updateString(int columnIndex String x); 该方法更新当前记录集当前行
某列的值该列的数据类型是String(指Java 数据类型是String 与之对应的JDBC 数据类
型是VARCHAR 或NVARCHAR 等数据类型) 该方法的参数columnIndex 指定所要更新的
列的列索引第一列的列索引是1 以此类推第二个参数x 代表新的值这个方法并不
执行数据库操作需要执行insertRow()方法或者updateRow()方法以后记录集和数据库中
的数据才能够真正更新
public void updateString(String columnName String x); 该方法和上面介绍的同名
方法差不多不过该方法的第一个参数是columnName 代表需要更新的列的列名而不是
columnIndex以上方法在jdbc 2.0中通过。