java接口result,Java ResultSet接口 详细说明

Java ResultSet接口 详细说明 记录集接口(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_FORWARD:该常数的作用是指定处理记录集中行的顺序是由前到后,即从第一行开始处理,一直 到最后一行。   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行,现在需要移动么第6行去,既可以使用 absolute()方法,也可以使用frelative()方法,代码如下。   例:   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();该方法的作用是将数据库游标向后移动一位,使得上一行成为当前行。   3、ResultSet接口添加了对行操作的支持   使用JDBC API2.0不仅可以任意将数据库游标定位到记录集中的特定行,而且可以使用ResultSet接口 新定义的一套方法更新当前行的数据,在以前,如果Java程序员希望更新记录集中某行的数据,必须发送 SQL语句给数据库,程序员需要在Java代码中嵌入冗长的SQL语句,用以执行UPDATE、DELETE、INSERT等数 据库操作,但是,当JDBC API2.0出现时,一切就都改变了,程序员已经可以部分抛开SQL语言,享受Java 编程的乐趣了。ResultSet接口中新添加的部分方法如下所示:   public boolean rowDeleted();如果当前记录集的某行被删除了,那么记录集中将会留出一个空位, 调用rowDelete()方法,如果探测到空位的存在,那么就返回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。   ResultSet接口中还定义了很多个updateXXX()方法,都和上面的两个方法相类似,由于篇幅的原因, 在这里就不详细描述了,对此感兴趣的读者,可以参考相关的文献。   往数据库当前记录集插入新行的操作流程如下:   (1)调用moveToInsertRow()方法。   (2)调用updateXXX()方法,指定插入行各列的值。   (3)调用insertRow()方法,往数据库中插入新的行。   4、新的ResultSet接口添加了对SQL3数据库类型的支持   SQL3技术规范中添加了若干个新的数据类型,如REF、ARRAY等,ResultSet接口扩充了getXXX()方法, 添加了获取这些类型的数据的getXXX()方法,如getArray()、getBlob()、getBigDecimal()、getClob()、 getRef()方法,这些方法既可以接收列索引为参数,也可以接收列名(字段名)为参数,这些方法分别返回 对应的Java对象实例,如Clob、Array(JDBC Array)、Blob、BigDecimal、Ref等,使用起来十分方便,至 于这些方法的用法,在下面还会涉及,这里就不赘述了。   5、获取记录集行数的方法   (1)首先使用last()方法,将数据库游标定位到记录集的最后一行。   (2)使用getRow()方法,返回记录集最后一行的行索引。该索引就等于记录集所包含记录的个数,也就 是记录集的行数。getRow()方法是在JDBC API 2.0中才定义的,在JDBC API 1.0中没有这个方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值