在Java中,
DB驱动程序是否为每行结果集请求DB?意味着如果总共有200行被提取,那么会有200个数据库请求吗?或者结果集本地存储在DB?
中如果我填充结果集(基于SQL语句中的某些条件),然后我在数据库中对数据进行一些更新/更改。结果集是否会返回更新的数据?
答案 0 :(得分:2)
您应该明确说明“请求”的含义。它因缓存数据的驱动程序和配置而异。但是,没有驱动程序会执行200次单独查询。
对于第二个问题,它取决于isolation级别。
答案 1 :(得分:2)
每个JDBC驱动程序都可以实现自己的提取策略。在迭代它们之前,驱动程序将获取许多行。因此,大型结果集不会预取所有行,而是以fetch-sized批次滚动。
您可以provide the JDBC driver a hint了解您想要获得的数量。
正如正在进行的SQL语句一样,除非您真的喜欢和set the isolation levels,否则不应期望其他事务的脏读。
最常见的是,Connection建立会话和网络连接,DB和您所说的200条记录将通过网络连接进行流式传输(和多路复用),并具有适当的流量控制。
另一种方法是使用RowSet而不是ResultSet,以便通过对受影响的行的更改事件通知您。
答案 2 :(得分:0)
我知道如果你关闭Statement,就无法遍历ResultSet。