JDBC结果集Result/Sets

从数据库查询读取数据的SQL语句返回的结果集的数据。 SELECT语句的标准方法来选择从一个数据库中的行并查来在一个结果集。java.sql.ResultSet接口表示一个数据库查询的结果集。

一个ResultSet对象维护一个游标指向当前行的结果集。术语“结果集”是指包含在ResultSet对象中的行和列的数据。

ResultSet接口的方法可分为三类:

  • 导航方法:用于移动光标.

  • 获取方法:用于查看当前行的光标所指向的列中的数据。

  • 更新方法:用于更新当前行的列中的数据。这些更新然后可以在基础数据库中,以及更新。

将光标移动基于ResultSet的属性。所创建生成ResultSet相应的声明时,这些属性被指定。

JDBC提供下列连接方法来创建所需的ResultSet语句:

  • createStatement(int RSType, int RSConcurrency);

  • prepareStatement(String SQL, int RSType, int RSConcurrency);

  • prepareCall(String sql, int RSType, int RSConcurrency);

第一个参数表示ResultSet对象的类型,第二个参数是2的ResultSet常量,用于指定一个结果集是否为只读或可更新之一。

ResultSet的类型:

可能的RSType如下,如果不指定ResultSet类型,将自动获得一个是TYPE_FORWARD_ONLY。

Type描述
ResultSet.TYPE_FORWARD_ONLY游标只能向前移动的结果集。
ResultSet.TYPE_SCROLL_INSENSITIVE游标可以向前和向后滚动,结果集不是别人向创建结果集后发生的数据库更改敏感。
ResultSet.TYPE_SCROLL_SENSITIVE.游标可以向前和向后滚动,结果集是别人向创建结果集后发生的数据库更改敏感。

并发性的ResultSet

可能的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接口涉及移动光标,包括:

S.N.方法 & 描述
1public void beforeFirst() throws SQLException 
将光标移动到正好位于第一行之前
2public void afterLast() throws SQLException 
将光标移动到刚刚结束的最后一行
3public boolean first() throws SQLException 
将光标移动到第一行
4public void last() throws SQLException 
将光标移动到最后一行。
5public boolean absolute(int row) throws SQLException 
将光标移动到指定的行
6public boolean relative(int row) throws SQLException 
从它目前所指向向前或向后移动光标行的给定数量。
7public boolean previous() throws SQLException 
将光标移动到上一行。上一行关闭的结果集此方法返回false
8public boolean next() throws SQLException 
将光标移动到下一行。如果没有更多的行结果集中的此方法返回false
9public int getRow() throws SQLException 
返回的行号,该光标指向的行.
10public void moveToInsertRow() throws SQLException 
将光标移动到一个特殊的行,可以用来插入新行插入到数据库中的结果集。当前光标位置被记住.
11public void moveToCurrentRow() throws SQLException 
移动光标返回到当前行,如果光标在当前插入行,否则,这个方法不执行任何操作

查看结果集:

ResultSet接口中含有几十种用于获取当前行的数据的方法。

有一个get方法为每个可能的数据类型,并且每个get方法有两个版本:

  • 即需要在一个列名。

  • 即需要在列中索引。

例如,如果有兴趣查看的列包含一个整数,需要使用ResultSet调用getInt()方法之一:

S.N.方法 & 描述
1public int getInt(String columnName) throws SQLException
返回整数的当前行中名为ColumnName列
2public int getInt(int columnIndex) throws SQLException
返回整数的当前行中指定列的索引。列索引从1开始,意味着一个行的第一列是1,行的第二列是2,依此类推。

与此类似的还有get方法在ResultSet接口为每个八个Java原始类型,以及常见的类型比如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()方法之一:

S.N.方法& 描述
1public void updateString(int columnIndex, String s) throws SQLException
指定列中的字符串更改为s的值。
2public void updateString(String columnName, String s) throws SQLException
类似于前面的方法,不同之处在于由它的名称,而不是它的索引指定的列。

有更新方法八个原始数据类型,以及字符串,对象,URL,并在java.sql包中的SQL数据类型。

更新结果集中的行改变当前行的列中的ResultSet对象,而不是基础数据库中。要更新更改数据库中的一行,需要调用下面的方法之一。

S.N.方法 & 描述
1public void updateRow()
通过更新数据库中相应的行更新当前行。
2public void deleteRow()
从数据库中删除当前行
3public void refreshRow()
刷新在结果集的数据,以反映最新变化在数据库中。
4public void cancelRowUpdates()
取消所做的当前行的任何更新。
5public void insertRow()
插入一行到数据库中。当光标指向插入行此方法只能被调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jdbc:mysql:/// 是一个数据库连接的URL格式,其中jdbc表示使用Java数据库连接技术,mysql表示使用MySQL数据库,而///表示使用默认的数据库和默认的端口。 [1 这个URL格式可以用来连接本地的MySQL数据库。例如:jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8 可以连接到本地的名为mydb的MySQL数据库,并设置字符编码为UTF-8。 在编程中获取数据库连接时,可以使用驱动管理器和上述URL格式来获取数据库的连接。 还可以通过硬编码使用DBCP连接池来获取连接,其中需要设置连接的驱动程序、URL、用户名和密码等信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [JDBC连接数据库](https://blog.csdn.net/qq_41256473/article/details/120118881)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [使用JDBC访问MySQL](https://blog.csdn.net/qq_46028988/article/details/114678595)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值