我试图理解这两种创建语句的方法之间的区别:
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
第二个参数相同但第一个 - 不同
来自java doc:
之一
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)的数据变化敏感的内容。
请提供一个演示和解释差异的示例。
答案 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完成的所有更改。