JDBC - 结果集

  • 简述

    从数据库查询中读取数据的 SQL 语句返回结果集中的数据。SELECT 语句是从数据库中选择行并在结果集中查看它们的标准方法。该java.sql.ResultSet中的接口表示结果集数据库查询。
    ResultSet 对象维护一个指向结果集中当前行的游标。术语“结果集”是指包含在 ResultSet 对象中的行和列数据。
    ResultSet 接口的方法可以分为三类 -
    • Navigational 方法 − 用于移动游标。
    • Get 方法 − 用于查看游标指向的当前行的列中的数据。
    • Update 方法− 用于更新当前行列中的数据。然后也可以在底层数据库中更新更新。
    游标可根据 ResultSet 的属性移动。这些属性是在创建生成 ResultSet 的相应 Statement 时指定的。
    JDBC 提供以下连接方法来创建具有所需结果集的语句 -
    • createStatement(int RSType, int RSConcurrency);
    • prepareStatement(String SQL, int RSType, int RSConcurrency);
    • prepareCall(String sql, int RSType, int RSConcurrency);
    第一个参数指示 ResultSet 对象的类型,第二个参数是两个 ResultSet 常量之一,用于指定结果集是只读还是可更新。
  • 结果集的类型

    下面给出了可能的 RSType。如果您不指定任何 ResultSet 类型,您将自动获得一个 TYPE_FORWARD_ONLY。
    类型 描述
    ResultSet.TYPE_FORWARD_ONLY 游标只能在结果集中向前移动。
    ResultSet.TYPE_SCROLL_INSENSITIVE 游标可以向前和向后滚动,结果集对创建结果集后其他人对数据库所做的更改不敏感。
    ResultSet.TYPE_SCROLL_SENSITIVE。 游标可以向前和向后滚动,结果集对其他人在创建结果集后对数据库所做的更改很敏感。
  • 结果集的并发

    下面给出了可能的 RSConcurrency。如果您不指定任何并发类型,您将自动获得一个 CONCUR_READ_ONLY。
    并发 描述
    ResultSet.CONCUR_READ_ONLY 创建只读结果集。这是默认的
    ResultSet.CONCUR_UPDATABLE 创建可更新的结果集。
    到目前为止我们写的所有例子都可以写成如下,它初始化一个 Statement 对象来创建一个只进、只读的 ResultSet 对象 -
    
    
    try {
    
       Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
    
    }
    
    catch(Exception ex) {
    
       ....
    
    }
    
    finally {
    
       ....
    
    }
    
    
  • 导航结果集

    ResultSet 接口中有几种涉及移动游标的方法,包括 -
    SN 方法和说明
    1 public void beforeFirst() throws SQLException
    将游标移动到第一行之前。
    2 public void afterLast() throws SQLException
    将游标移动到最后一行之后。
    3 public boolean first() throws SQLException
    将游标移动到第一行。
    4 public void last() throws SQLException
    将游标移动到最后一行。
    5 public boolean absolute(int row) throws SQLException
    将游标移动到指定的行。
    6 public boolean relative(int row) throws SQLException
    将游标从当前指向的位置向前或向后移动给定的行数。
    7 public boolean previous() throws SQLException
    将游标移动到上一行。如果前一行不在结果集中,则此方法返回 false。
    8 public boolean next() throws SQLException
    将游标移动到下一行。如果结果集中没有更多行,则此方法返回 false。
    9 public int getRow() throws SQLException
    返回游标指向的行号。
    10 public void moveToInsertRow() throws SQLException
    将游标移动到结果集中的特殊行,该行可用于向数据库中插入新行。记住当前游标位置。
    11 public void moveToCurrentRow() throws SQLException
    如果游标当前位于插入行,则将游标移回当前行;否则,这个方法什么都不做
  • 查看结果集

    ResultSet 接口包含数十种获取当前行数据的方法。
    每个可能的数据类型都有一个 get 方法,每个 get 方法都有两个版本 -
    • 一个接受列名的人。
    • 一个接受列索引的。
    例如,如果您有兴趣查看的列包含一个 int,则需要使用 ResultSet 的 getInt() 方法之一 -
    SN 方法和说明
    1 public int getInt(String columnName) throws SQLException
    返回名为 columnName 的列中当前行中的 int。
    2 public int getInt(int columnIndex) throws SQLException
    返回指定列索引中当前行中的 int。列索引从 1 开始,这意味着一行的第一列是 1,一行的第二列是 2,依此类推。
    同样,在 ResultSet 接口中,对于八种 Java 原始类型中的每一种都有 get 方法,以及诸如 java.lang.String、java.lang.Object 和 java.net.URL 等常见类型。
    还有获取 SQL 数据类型 java.sql.Date、java.sql.Time、java.sql.TimeStamp、java.sql.Clob 和 java.sql.Blob 的方法。查看文档以获取有关使用这些 SQL 数据类型的更多信息。
    为了更好地理解,让我们研究查看 - 示例代码
  • 更新结果集

    ResultSet 接口包含一组更新方法,用于更新结果集的数据。
    与 get 方法一样,每种数据类型都有两种更新方法 -
    • 一个接受列名的人。
    • 一个接受列索引的。
    例如,要更新结果集当前行的 String 列,您可以使用以下 updateString() 方法之一 -
    SN 方法和说明
    1 public void updateString(int columnIndex, String s) throws SQLException
    将指定列中的 String 更改为 s 的值。
    2 public void updateString(String columnName, String s) throws SQLException
    与前面的方法类似,不同之处在于列由其名称而不是其索引指定。
    java.sql 包中有八种原始数据类型以及 String、Object、URL 和 SQL 数据类型的更新方法。
    更新结果集中的一行会更改 ResultSet 对象中当前行的列,但不会更改基础数据库中的列。要更新对数据库中行的更改,您需要调用以下方法之一。
    SN 方法和说明
    1 public void updateRow()
    通过更新数据库中的相应行来更新当前行。
    2 public void deleteRow()
    从数据库中删除当前行
    3 public void refreshRow()
    刷新结果集中的数据以反映数据库中的任何最近更改。
    4 public void cancelRowUpdates()
    取消对当前行所做的任何更新。
    5 public void insertRow()
    在数据库中插入一行。只有在游标指向插入行时才能调用此方法。