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() 在数据库中插入一行。只有在游标指向插入行时才能调用此方法。 -