因此,我知道一些相对差异,即ResultSet
与数据库具有``开放连接'',而RowSet
以``断开连接''的方式工作。
但这几乎是我的理解(可能不正确):
那么我的问题是-在什么情况下比其他情况更好?他们各自的优点/缺点是什么?
RowSet
,在断开连接模式,特别适用于
“只读”查询将具有
更高的性能
并发系统。那是对的吗?
如果是这样的话,可以肯定地说
RowSet
总是比ResultSet
用于只读查询?RowSet
不会引发SQL异常,但这有好处吗?另一个
因为
RowSet
是可序列化的。但我主要担心的是
绩效角度将是什么
选择?
读写查询?您可以同步
ResultSet回到数据库? (我不是
确定是否有可能(可能是
而且我只是无法记忆或谷歌
足够好了:)已经有一段时间了
使用原始JDBC ...
有任何想法吗?很明显,我的知识中缺少一些空白:)
我问的原因是我想在实现Spring-JDBC的
ResultSetExtractor
接口(interface)与在处理某些数据时返回SqlRowSet
之间进行选择。这个问题只是让我好奇如何决定何时选择什么,除了扔硬币:) 最佳答案
行集
RowSet
几乎总是正确的选择,它功能更全,并具有您列出的所有优点,并且具有专门用于特殊目的的实现,例如断开连接的CachedRowSet
,这是我将数据放入内存时经常使用的功能,所以我可以尽快将连接释放回池以供重用。ResultSet
绝对不能成为公共(public)契约(Contract)的一部分。
连接的ResultSet/Rowset
绝不能转义该方法,或者更不要说创建该方法的对象。至少可以使用RowSet
断开它的连接,客户端不必关心实现。 *除非您正在编写JDBC
特定的库代码,这些库代码可以交互或依赖ResultSet
特定的功能或契约(Contract)。
如果您只是传输查询结果,则JDBC
特定类应作为公共(public)契约(Contract)的一部分。
理想情况下,您希望将RowSet/ResultSet
内容具体化为类型安全的域对象以进行传递。
在大多数情况下,您要实例化要操作和使用的域对象的List/Set
,而不是将代码直接耦合到JDBC
api。
存在许多现代的ResultSetMapper<T>
类,可以使用Visitor
模式处理生成类型安全域实例,因为这是惯用的处理方式。