因此,我知道一些相对差异,即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模式处理生成类型安全域实例,因为这是惯用的处理方式。

    10-08 14:00