我对 a 的行为感到困惑ResultSet
这是类型TYPE_SCROLL_SENSITIVE
.
我对此的理解是:
- 我执行一个选择查询,返回一个结果集。我打印出第一行中特定列的值。
- 然后我执行
Thread.sleep(10000)
,这会使程序暂停 10 秒。
- 当程序处于休眠状态时,我手动对数据库中的同一列进行更新(通过 SQL 提示符)。
- 10 秒后,我再次打印结果集第一行中同一列的值。
在步骤 4 中,我希望打印的列值与步骤 1 中打印的值不同。但我总是得到相同的值(即使我的ResultSet
属于类型SCROLL_TYPE_SENSITIVE
).
我在这里误解了什么吗?
下面是我使用的代码。
private void doStuff() throws Exception
{
final String query = "select * from suppliers where sup_id=420";
Statement stmt = this.con.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(query);
rs.next();
System.out.println("City : " + rs.getString("city"));
Thread.sleep(10000); // While this executes, I do a manual update !
System.out.println("City : " + rs.getString("city"));
}
我在这里误解了什么吗?
是的。您必须再次获取以获得表的最新状态,或者通过启动SELECT
自己或致电ResultSet.refreshRow()
。此外,阅读文档ResultSet.refreshRow() https://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html#refreshRow--使用前请先了解一下,否则可能会得到意想不到的结果。
该文档声明有关 TYPE_SCROLL_SENSITIVE,
TYPE_SCROLL_SENSITIVE
指示 a 类型的常量
可滚动的 ResultSet 对象
并且通常对变化敏感
别人做的。
这仅仅意味着它会对同一 ResultSet 对象中其他人所做的更改敏感。为了理解这个概念,我建议看看这个官方的JDBC 教程:更新表 https://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html.
好的,编辑我的帖子以包含原始教程中的特定行,
通过可滚动的结果集,您可以
移动到您想要更改的行,并且
如果类型是 TYPE_SCROLL_SENSITIVE,
您可以连续获取新值
当你改变它之后。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)