ResultSet TYPE_SCROLL_SENSITIVE和TYPE_SCROLL_INSENSITIVE之间的区别

时间:2014-08-30 17:50:21

标签: java jdbc database-connection resultset

我试图理解这两种创建语句的方法之间的区别:

1

Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

2

Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);

第二个参数相同但第一个 - 不同

来自java doc:

  

resultSetType - 结果集类型; ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_SENSITIVE

之一

  

TYPE_SCROLL_INSENSITIVE
  该常量指示ResultSet对象的类型,该对象可滚动但通常对ResultSet下的数据更改不敏感。


  

TYPE_SCROLL_SENSITIVE
  该常量指示ResultSet对象的类型,该对象可滚动且通常对ResultSet下的数据更改敏感。

因此,我希望显示ResultSet基础的敏感性之间的差异。我想了解这个“对ResultSet”(来自Javadoc)的数据变化敏感的内容。

请提供一个演示和解释差异的示例。

1 个答案:

答案 0 :(得分:7)

敏感性与基础数据(数据库)有关。

假设您在数据库中有PEOPLE表。您创建了不敏感的语句:

Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

并在时间8:20发出查询

SELECT * FROM PEOPLE;

现在您将结果集保持打开状态,然后使用next(),previous()和absolute(int)方法滚动它。

8:23有人在PEOPLE表中更新数据。

在8:24,您仍在滚动结果集,但因为您有INSENSITIVE结果集,所以您会看到旧数据。

现在出现了差异。如果您使用SENSITIVE创建了语句,那么您将看到在8:23完成的所有更改。