尚学堂

JDBC ResultSet

我要纠错

JDBC教程 - JDBC ResultSet


JDBCjava.sql.ResultSet 用于处理从SQL select语句返回的结果。

SQL select语句从数据库读取数据,并返回结果集中的数据。

select语句的结果以表格形式显示。它有列和行。

ResultSet对象维护一个指向结果集中当前行的游标。

对于某一行,我们可以使用 java.sql.ResultSet 中的方法来获取数据逐列。

ResultSet中的方法

ResultSet接口的方法有三个类别:

  • Navigational方法来回移动光标。
  • Getter方法从当前行获取数据。
  • Update方法更新当前行的数据。

ResultSet类型

光标基于ResultSet的特性是可移动的。这些属性在创建JDBC语句时设置。

下面列出了Resultset类型,默认值为TYPE_FORWARD_ONLY。

类型描述
ResultSet.TYPE_FORWARD_ONLY光标只能向前移动。
ResultSet.TYPE_SCROLL_INSENSITIVE光标可以向前和向后滚动。 ResultSet对在创建ResultSet后对数据库所做的更改不敏感。
ResultSet.TYPE_SCROLL_SENSITIVE光标可以向前和向后滚动。并且ResultSet对在创建结果集后对数据库所做的更改很敏感。

ResultSet的并发性

ResultSet并发类型如下所示。默认并发类型为CONCUR_READ_ONLY。

并发 描述
ResultSet.CONCUR_READ_ONLY 只读结果集。 这是默认值
ResultSet.CONCUR_UPDATABLE 可更新结果集。

例子

JDBC从Connection对象提供了以下方法来使用某些类型的ResultSet创建语句。

  • createStatement(int resultSetType,int resultSetConcurrency);

  • prepareStatement(String SQL,int resultSetType,int resultSetConcurrency);

  • prepareCall(String sql,int resultSetType,int resultSetConcurrency);

以下代码创建一个Statement对象以创建只向前的只读ResultSet对象

Statement stmt = conn.createStatement(
                        ResultSet.TYPE_FORWARD_ONLY,
                        ResultSet.CONCUR_READ_ONLY);

ResultSet导航

我们可以使用ResultSet接口中的以下方法来移动光标。

方法描述
beforeFirst()将光标移动到第一行之前
afterLast()将光标移动到最后一行之后
first()将光标移动到第一行
last()将光标移动到最后一行
绝对(int row)将光标移动到指定的行
relative(int row)相对于光标所在位置向前或向后移动光标行数。
previous()将光标移到上一行。
next()将光标移动到下一行。
int getRow()返回游标指向的行号。
moveToInsertRow()将光标移动到我们可以将新行插入数据库的位置。当前行号不更改。
moveToCurrentRow()如果光标当前位于插入行,则将光标移回当前行;否则,此方法不执行任何操作

ResultSet列数据

我们有两种方法在ResultSet中获取数据。

  • 按列索引
  • 按列名称

例如,以下两个方法从列中获取int值。第一个是按列名称,第二个是按列索引。

public int getInt(String columnName)
public int getInt(int columnIndex) 

列索引从1开始。

更新ResultSet

我们可以更新ResultSet对象中的当前行。

我们需要在更新期间指明列名或索引。

例如,要更新当前行的String列,我们可以使用以下方法。

public void updateString(int columnIndex, String s) throws SQLException
public void updateString(String columnName, String s) throws SQLException

要将更新更改推送到数据库,请调用以下方法之一。

描述描述
updateRow()更新数据库中的相应行。
deleteRow()从数据库中删除当前行
refreshRow()刷新结果集以反映数据库中的任何更改。
cancelRowUpdates()取消对当前行所做的任何更新。
insertRow()当光标指向插入行时,在数据库中插入一行。
二维码
建议反馈
二维码