- JDBC教程
- JDBC - 主页
- JDBC - 简介
- JDBC - SQL 语法
- JDBC - 环境
- JDBC - 示例代码
- JDBC - 驱动程序类型
- JDBC - 连接
- JDBC - 语句
- JDBC - 结果集
- JDBC - 数据类型
- JDBC - 事务
- JDBC - 异常
- JDBC - 批处理
- JDBC - 存储过程
- JDBC - 流数据
- JDBC 示例
- JDBC - 创建数据库
- JDBC - 选择数据库
- JDBC - 删除数据库
- JDBC - 创建表
- JDBC - 删除表
- JDBC - 插入记录
- JDBC - 选择记录
- JDBC - 更新记录
- JDBC - 删除记录
- JDBC - WHERE 子句
- JDBC - Like 子句
- JDBC - 数据排序
- JDBC 有用资源
- JDBC - 问题与解答
- JDBC - 快速指南
- JDBC - 有用的资源
- JDBC - 讨论
- 有用 - Java 教程
JDBC - 结果集
从数据库查询读取数据的 SQL 语句,返回结果集中的数据。SELECT 语句是从数据库中选择行并在结果集中查看它们的标准方法。java.sql.ResultSet接口表示数据库查询的结果集。
ResultSet 对象维护一个指向结果集中当前行的游标。术语“结果集”是指 ResultSet 对象中包含的行和列数据。
ResultSet 接口的方法可以分为三类 -
导航方法- 用于移动光标。
获取方法- 用于查看光标指向的当前行的列中的数据。
更新方法- 用于更新当前行列中的数据。然后,这些更新也可以在底层数据库中进行更新。
光标可以根据 ResultSet 的属性进行移动。这些属性是在创建生成 ResultSet 的相应语句时指定的。
JDBC 提供以下连接方法来创建具有所需结果集的语句 -
createStatement(int RSType, int RSConcurrency);
准备语句(字符串SQL,int RSType,int RSConcurrency);
准备调用(字符串sql,int RSType,int RSConcurrency);
第一个参数指示 ResultSet 对象的类型,第二个参数是两个 ResultSet 常量之一,用于指定结果集是只读还是可更新。
结果集类型
下面给出了可能的 RSType。如果您未指定任何 ResultSet 类型,您将自动获得 TYPE_FORWARD_ONLY 类型。
类型 | 描述 |
---|---|
结果集.TYPE_FORWARD_ONLY | 光标只能在结果集中向前移动。 |
结果集.TYPE_SCROLL_INSENSITIVE | 游标可以向前和向后滚动,结果集对创建结果集后其他人对数据库所做的更改不敏感。 |
结果集.TYPE_SCROLL_SENSITIVE。 | 游标可以向前和向后滚动,结果集对创建结果集后其他人对数据库所做的更改很敏感。 |
结果集的并发
下面给出了可能的 RSConcurrency。如果您未指定任何并发类型,您将自动获得 CONCUR_READ_ONLY 并发类型。
并发性 | 描述 |
---|---|
结果集.CONCUR_READ_ONLY | 创建只读结果集。这是默认设置 |
结果集.CONCUR_UPDATABLE | 创建可更新的结果集。 |
到目前为止我们编写的所有示例都可以写成如下,它初始化一个 Statement 对象来创建一个只进、只读的 ResultSet 对象 -
try { Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); } catch(Exception ex) { .... } finally { .... }
导航结果集
ResultSet 接口中有多种涉及移动光标的方法,包括 -
序列号 | 方法与说明 |
---|---|
1 | public void beforeFirst() 抛出 SQLException
将光标移动到第一行之前。 |
2 | public void afterLast() 抛出 SQLException
将光标移动到最后一行之后。 |
3 | public boolean first() 抛出 SQLException
将光标移至第一行。 |
4 | public void last() 抛出 SQLException
将光标移动到最后一行。 |
5 | public boolean Absolute(int row) 抛出 SQLException
将光标移动到指定行。 |
6 | public booleanrelative(int row) 抛出 SQLException
将光标从当前指向的位置向前或向后移动给定的行数。 |
7 | public boolean previous() 抛出 SQLException
将光标移动到上一行。如果前一行不在结果集中,则此方法返回 false。 |
8 | public boolean next() 抛出 SQLException
将光标移动到下一行。如果结果集中没有更多行,则此方法返回 false。 |
9 | public int getRow() 抛出 SQLException
返回光标指向的行号。 |
10 | public void moveToInsertRow() 抛出 SQLException
将游标移动到结果集中的特殊行,可用于将新行插入数据库。当前光标位置被记住。 |
11 | public void moveToCurrentRow() 抛出 SQLException
如果光标当前位于插入行,则将光标移回当前行;否则,这个方法什么也不做 |
为了更好地理解,让我们研究Navigate - 示例代码。
查看结果集
ResultSet 接口包含数十种获取当前行数据的方法。
每种可能的数据类型都有一个 get 方法,每个 get 方法都有两个版本 -
一个接受列名的列。
接受列索引的一个。
例如,如果您有兴趣查看的列包含 int,则需要使用 ResultSet 的 getInt() 方法之一 -
序列号 | 方法与说明 |
---|---|
1 | public int getInt(String columnName) 抛出 SQLException
返回名为columnName 的列中当前行的int。 |
2 | public int getInt(int columnIndex) 抛出 SQLException
返回当前行中指定列索引的 int。列索引从 1 开始,表示行的第一列为 1,行的第二列为 2,依此类推。 |
类似地,ResultSet 接口中对于八种 Java 基本类型以及 java.lang.String、java.lang.Object 和 java.net.URL 等常见类型中的每一种都有 get 方法。
还有一些获取 SQL 数据类型 java.sql.Date、java.sql.Time、java.sql.TimeStamp、java.sql.Clob 和 java.sql.Blob 的方法。有关使用这些 SQL 数据类型的更多信息,请查看文档。
为了更好地理解,让我们研究查看 - 示例代码。
更新结果集
ResultSet 接口包含用于更新结果集数据的更新方法的集合。
与 get 方法一样,每种数据类型都有两种更新方法 -
一个接受列名的列。
接受列索引的一个。
例如,要更新结果集当前行的字符串列,您可以使用以下 updateString() 方法之一 -
序列号 | 方法与说明 |
---|---|
1 | public void updateString(int columnIndex, String s) 抛出 SQLException
将指定列中的 String 更改为 s 的值。 |
2 | public void updateString(String columnName, String s) 抛出 SQLException
与前面的方法类似,不同之处在于列是通过其名称而不是索引来指定的。 |
java.sql 包中提供了八种基本数据类型以及 String、Object、URL 和 SQL 数据类型的更新方法。
更新结果集中的行会更改 ResultSet 对象中当前行的列,但不会更改基础数据库中的列。要更新对数据库中行的更改,您需要调用以下方法之一。
序列号 | 方法与说明 |
---|---|
1 | 公共无效更新行()
通过更新数据库中的相应行来更新当前行。 |
2 | 公共无效删除行()
从数据库中删除当前行 |
3 | 公共无效刷新行()
刷新结果集中的数据以反映数据库中的任何最新更改。 |
4 | 公共无效取消行更新()
取消对当前行所做的任何更新。 |
5 | 公共无效插入行()
将一行插入数据库。仅当光标指向插入行时才能调用此方法。 |
为了更好地理解,让我们研究一下更新示例代码。