这一点,在java.sql.ResultSet接口源码中给出了解释,
源码中所给解释如下, A ResultSet object is automatically closed when the Statement object that generated it is closed, re-executed, or used to retrieve the next result from a sequence of multiple results.
也就是说:
由于当Statement对象被关闭,或是再次执行executeXXX()方法,或者是从多个结果集序列中取回下一个结果集时,ResultSet对象会自动调用close()方法关闭资源,那么,ResultSet接口对象就不能作为方法参数,因为它会随着finally代码块中的关闭statement *** 作而被自动关闭。 因此,要将ResultSet返回的查询结果封装到List集合中,并将其返回,进行其它 *** 作。 此外,java是面向对象的编程语言,java中所有的数据处理都是基于面向对象的编码风格实现的,让数据以符合java风格的形式存在,便于对数据的后续处理。
# 关于ResultSet的更多信息——[来源java.sql.ResultSet接口源码]
java.sql.ResultSet接口源码对其做了如下描述: (1)ResultSet接口对象-代表当前一次,执行SQL语句得到的数据库结果集,表示一个数据表数据集合. 该对象持有一个指向当前行数据的游标指针(指针最初指向第一行数据之前),调用成员方法next可以将游标指 针移动到下一行,并返回true;而如果下一行数据不存在,就返回false。这样,就可以借助while循环迭代访 问结果集。 (2) 默认情况下,ResultSet对象是可迭代的(通过next方法实现)、可更新的(通过Statement接口的 executeQuery方法实现)。 (3) 通常地,借助ResultSet对象的getter方法取回查询结果数据时,使用从1开始的下标更为高效;而通过传递名称字符串取回查询结果的方式,仅在SQL查询语句中包含了结果字段时才被采用。 (4) SQL数据类型与Java数据类型之间存在着一一对应的映射关系,这种关系被JDBC specification所定义[可参考博客:https://www.cnblogs.com/shishm/archive/2012/01/30/2332142.html]。 (5) 从JDBC API 2.0标准版本开始,ResultSet接口新增了一些updateXXX()方法,可用于直接更新数据表中的数据。例如: [1]更新第5行数据, rs.absolute(5); // moves the cursor to the fifth row of rs rs.updateString("NAME", "AINSWORTH"); // updates the // NAME column of row 5 to be AINSWORTH rs.updateRow(); // updates the row in the data source [2]插入新的行数据, rs.moveToInsertRow(); // moves cursor to the insert row rs.updateString(1, "AINSWORTH"); // updates the // first column of the insert row to be AINSWORTH rs.updateInt(2,35); // updates the second column to be 35 rs.updateBoolean(3, true); // updates the third column to true rs.insertRow(); rs.moveToCurrentRow(); (6)需要注意的是:当Statement对象被关闭,或是再次执行executeXXX()方法,或者是从多个结果集序列中取回下一个结果集时,ResultSet对象会自动调用close()方法关闭资源。 public interface ResultSet extends Wrapper, AutoCloseable { }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)