实际上用 RowSet 来解决 Banq 提出的问题是很好的,因为它实际上并没有保持数据库的 Connection. SUN 的 RI 是怎么实现的,我并不知道,在有 JDBC2.0以前, 我自己写了一个 通用的Model.
Result[
RowData1[Field1,Field2...],
RowData2[Field1,Field2...]
...
]
<p>
|
这种 Model 不适合大数据量的应用。 CachedRowSet 是保证你在断开 Connection 后还能使用数据,很显然,数据在内存里。我们可以假设一下,如果它使用我这种方式,读取所有的ResultSet,肯定很耗内存。
于是我猜想:
如果它不把数据放入内存,那它就只有在每次到达请求边界时,再去数据库取数据,当然取的策略可以有很多。
假设它是这样取的,每次从数据库取一定量的数据(10条),放入内存。
当你用 RowSet.next() 做 iterator,来到最后一条数据(第10条)时,它就会向数据库发出请求,用新的数据块(8或9条)来替换掉现在的数据。同理,到达相应的边界,也要不断地重复更新数据.
我觉得使用这样的策略可能是一种好的方法.