【问题标题】:Difference between ResultSet TYPE_SCROLL_SENSITIVE and TYPE_SCROLL_INSENSITIVEResultSet TYPE_SCROLL_SENSITIVE 和 TYPE_SCROLL_INSENSITIVE 的区别
【发布时间】:2014-10-24 11:10:20
【问题描述】:

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

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 文档:

resultSetType - 结果集类型; ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE 之一

和

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


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

因此,我想展示ResultSet 的底层敏感度之间的差异。我想了解这种“对ResultSet 基础数据的更改敏感”(来自Javadoc)的含义。

请提供一个示例来说明和解释差异。

【问题讨论】:

  • 看起来你可以用rowset.previous() 向后迭代只有在设置了不敏感标志的情况下。看起来不是特别有用。
  • 我认为这个选项名称为“可滚动”,并且在问题中提到的两个参数都是可滚动的
  • 两者都可以滚动,但只能向后滚动不敏感。
  • 看起来你说的是 ResultSet.TYPE_FORWARD_ONLY
  • 看来你是对的,看看 FilipNguyen 的回答 :)

标签: java jdbc database-connection resultset


【解决方案1】:

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

假设您在数据库中有 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 完成的所有更改。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 2011-10-20
  • 2020-01-23
  • 1970-01-01
相关资源
最近更新 更多