- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
JavaDoc 说:“指示 ResultSet 对象类型的常量是可滚动的,但通常对 ResultSet 下的数据的更改不敏感”.
我对可滚动部分很清楚,但对声明的后半部分有疑问。我正在使用以下代码片段来验证我的理解。
conn = getConnection();
Statement stmt = conn
.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String query = "select * from vehicle";
ResultSet rs = stmt.executeQuery(query);
rs.absolute(2);
System.out.print(rs.getString(2));
System.out.println("Waiting........");
Thread.sleep(20000); //1 manually changed database entry
rs.refreshRow();
System.out.println(rs.getString(2));//2 Surprisingly changes is reflected
在评论 1 中,我在数据库中进行了手动更改,然后调用了 rs.refreshRow() 方法。在评论 2 之后,当我访问第二列的值时,第二列的值发生了惊人的变化。根据我的理解,不应反射(reflect)此更改,因为“它对其他人所做的更改不敏感”(根据 JavaDoc)。谁能解释一下它的实际用途是什么?
最佳答案
我不久前对此进行了调查,特别是关于 MySQL Connector/J。据我所知,设置 ResultSet.TYPE_SCROLL_SENSITIVE
和 ResultSet.TYPE_SCROLL_INSENSITIVE
实际上并没有影响从 MySQL 检索数据时的行为。
我发现几个类似的问题和博客文章提到了 MySQL Connector/J 文档,在关于 JDBC API Implementation Notes 的部分中上面写着
By default, ResultSets are completely retrieved and stored in memory. In most cases this is the most efficient way to operate and, due to the design of the MySQL network protocol, is easier to implement.
它继续讨论使用 ResultSet.TYPE_FORWARD_ONLY
、ResultSet.CONCUR_READ_ONLY
和 stmt.setFetchSize(Integer.MIN_VALUE);
作为“向驱动程序发出逐行流式传输结果集的信号”,但即使在那种情况下,我的测试表明,只要我执行 stmt.executeQuery(...)<,整个 ResultSet 仍会被检索
。 (尽管我可能遗漏了一些其他连接设置,这些设置在 MySQL Connector/J 文档的该部分中未明确提及。)
最后我得出结论,ResultSet.TYPE_SCROLL_[IN]SENSITIVE
设置在 MySQL Connector/J 下确实没有任何区别。虽然只是简单地滚动 ResultSet,但它似乎总是表现得像 INSENSITIVE
(忽略其他进程对现有行所做的任何更改),但是 rs.refreshRow();
始终返回最新数据(包括其他进程所做的更改),就好像它是 SENSITIVE
,即使 ResultSet 应该是 INSENSITIVE
。
关于java - 创建 Statement 对象时 TYPE_SCROLL_INSENSITIVE 的用途是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28125502/
我正在使用 sql server 数据库开发一个 Java 项目,一旦我使用 stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
我正在编写一段简单的代码: import java.sql.*; class ODBC { MyConnection myCon; Connection jdbcConnection; Result
所以 TYPE_SCROLL_INSENSITIVE 结果集允许我在两个方向上滚动,而 TYPE_FORWARD_ONLY 只允许我向前移动。 既然 TYPE_SCROLL_INSENSITIVE 允
JavaDoc 说:“指示 ResultSet 对象类型的常量是可滚动的,但通常对 ResultSet 下的数据的更改不敏感”. 我对可滚动部分很清楚,但对声明的后半部分有疑问。我正在使用以下代码片段
我试图了解这两种创建语句的方法之间的区别: 1: Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSE
在一个项目期间,我们发现我们正在执行的一些 SQL 语句(但不是全部)在 Java 应用程序中返回的结果与在 Aquadata 或 Toad 等独立 SQL IDE 中运行时返回的结果不同。这使用 D
我是一名优秀的程序员,十分优秀!