ResultSet对象
在之前所讲解的ResultSet操作中,ResultSet主要用于存储结果集,并且只能通过next()方法由前向后逐个获取结果集中的数据。但是,如果想获取结果集中任意位置的数据,则需要在创建Statement对象时,设置两个ResultSet定义的常量,具体设置方式如下:
   Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENITIVE, ResultSet.CONCUR_READ_ONLY);
   ResultSet rs = st.excuteQuery(sql);在上述方式中,常量“Result.TYPE_SCROLL_INSENITIVE”表示结果集可滚动,常量“ResultSet.CONCUR_READ_ONLY”表示以只读形式打开结果集。
为了大家更好地学习ResultSet对象的使用,接下来,通过一个案例来演示如何使用ResultSet对象滚动读取结果集中的数据,如例1所示。
例1 Example04.java
 1  package cn.itcast.jdbc.example;
 2  import java.sql.Connection;
 3  import java.sql.DriverManager;
 4  import java.sql.ResultSet;
 5  import java.sql.SQLException;
 6  import java.sql.Statement;
 7  public class Example04 {
 8    public static void main(String[] args) {
 9      Connection conn = null;
 10     Statement stmt = null;
 11     try {
 12       Class.forName("com.mysql.jdbc.Driver");
 13       String url = "jdbc:mysql://localhost:3306/chapter01";
 14       String username = "root";
 15       String password = "itcast";
 16       conn = DriverManager.getConnection(url, username, password);
 17       String sql = "select * from users";
 18       Statement st =conn.createStatement(
 19           ResultSet.TYPE_SCROLL_INSENSITIVE, 
 20           ResultSet.CONCUR_READ_ONLY);
 21       ResultSet rs = st.executeQuery(sql);
 22       System.out.print("第2条数据的name值为:");
 23       rs.absolute(2);    //将指针定位到结果集中第2行数据
 24       System.out.println(rs.getString("name"));
 25       System.out.print("第1条数据的name值为:");
 26       rs.beforeFirst();   //将指针定位到结果集中第1行数据之前
 27       rs.next();       //将指针向后滚动
 28       System.out.println(rs.getString("name"));
 29       System.out.print("第4条数据的name值为:");
 30       rs.afterLast();    //将指针定位到结果集中最后一条数据之后
 31       rs.previous();     //将指针向前滚动
 32       System.out.println(rs.getString("name"));
 33     } catch (Exception e) {
 34       e.printStackTrace();
 35     } finally { // 释放资源
 36       if (stmt != null) {
 37         try {
 38           stmt.close();
 39         } catch (SQLException e) {
 40           e.printStackTrace();
 41         }
 42         stmt = null;
 43       }
 44       if (conn != null) {
 45         try {
 46           conn.close();
 47         } catch (SQLException e) {
 48           e.printStackTrace();
 49         }
 50         conn = null;
 51       }
 52     }
 53   }
 54 }程序的运行结果如图1所示。

图1 运行结果
从图1中可以看出,程序输出了结果集中指定的数据。由此可见,使用ResultSet对象处理结果集是相当灵活的。










