结果集ResultSet

160 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

首先,我们要明白ResultSet的定义及本质,ResultSet对象代表SQL语句执行的结果集,它包含符合SQL语句中条件的所有行。对于SQL语句执行结果的操作,实质上是对ResultSet对象的操作。

ResultSet的实现:

ResultSet维护指向其当前数据行的光标。每调用一次next方法,光标向下移动一行。最初它位于第一行之前,因此第一次调用next将把光标置于第一行上,使它成为当前行。每次调用next导致光标向下移动一行,按照从上至下的次序获取ResultSet行。在ResultSet对象或其父辈Statement对象关闭之前,光标一直保持有效。

获取对象的方法:

方法getXXX提供了获取当前行中某列值的途径。在每一行内,可按任何次序获取列值。但为了保证可移植性,应该从左至右获取列值,并且一次性地读取列值。列名或列号可用于标识要从中获取数据的列。假设ResultSet对象rs的第二列名为title,并将值存储为字符串,则下列任一代码将获取存储在该列中的值:

 String s = rs.getString("title");
 String s = rs.getString(2);

注意列是从左至右编号的,并且从列1开始。同时,用作getXXX方法的输入的列名不区分大小写。提供使用列名这个选项的目的是让在查询中指定列名的用户可使用相同的名字作为getXXX方法的参数。另一方面,如果select语句未指定列名(例如在“select * from table1”中或者列是导出的时),则应该使用列号。这些情况下,用户将无法确切知道列名。有些情况下,SQL查询返回的结果集中可能有多个列具有相同的名字。如果列名用作getXXX方法的参数,则getXXX将返回第一个匹配列名的值。因而,如果多个列具有相同的名字,则需要使用列索引确保检索了正确的列值。这时,使用列号效率要稍微高一些。

安全方面:

Statement对象执行完毕,将由Java垃圾收集程序自动关闭,而作为一种好的编程风格,应在不需要Statement对象时显式地关闭它们。这将立即释放数据库资源,从而有助于避免潜在的内存泄漏问题。

本次我们从ResultSet的定义本质,实现,方法,安全等方面介绍了访问数据库的结果集,这很好的帮助我们对访问到的数据进行统一的管理。