结果集是否与数据库直接连接

时间:2010-12-28 05:09:24

标签: java jdbc

在Java中,

DB驱动程序是否为每行结果集请求DB?意味着如果总共有200行被提取,那么会有200个数据库请求吗?或者结果集本地存储在DB?

如果我填充结果集(基于SQL语句中的某些条件),然后我在数据库中对数据进行一些更新/更改。结果集是否会返回更新的数据?

3 个答案:

答案 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。