java:为什么ResultSet不可序列化?
经过数小时的搜索,我终于意识到这是不可序列化的,也没有办法做到这一点。我尝试将其添加到列表中,作为可序列化对象中的实例变量和其他内容,但结果证明这是天真和绝望的尝试。我尝试使用类似的可序列化实现,但它们增加了响应时间,很可能是因为它们迭代了结果集。 总之,除非您选择迭代ResultSet,否则无法通过网络发送它包含的数据java:为什么ResultSet不可序列化?,java,sql,serialization,jdbc,Java,Sql,Serialization,Jdbc,经过数小时的搜索,我终于意识到这是不可序列化的,也没有办法做到这一点。我尝试将其添加到列表中,作为可序列化对象中的实例变量和其他内容,但结果证明这是天真和绝望的尝试。我尝试使用类似的可序列化实现,但它们增加了响应时间,很可能是因为它们迭代了结果集。 总之,除非您选择迭代ResultSet,否则无法通过网络发送它包含的数据 我知道我必须迭代并向数据模型对象和列表添加内容的备选方案,但我急切地想知道这背后的理性是什么?java开发人员当时是怎么想的?据我所知,结果集并不“包含”数据。 如果调用Res
我知道我必须迭代并向数据模型对象和列表添加内容的备选方案,但我急切地想知道这背后的理性是什么?java开发人员当时是怎么想的?据我所知,结果集并不“包含”数据。 如果调用ResultSet,则将从数据库的底层(JDBC)连接获取数据
如果结果集被序列化并传输到另一台计算机,这是不可能的。在那里,连接将不可用。我无法回答原始开发人员的想法,但界面设计清楚地揭示了一些元素 首先,让我们注意到ResultSet是一个接口,设计者并不希望它是可序列化的 但是,ResultSet仍然是一个功能强大的接口,一般来说,它是可序列化的几乎没有意义。 举几个例子
也就是说,如果在实现上有足够的限制条件(如不使用更新方法和禁用流式传输功能),当然可以实现可序列化的实现。正如您所说,“底线是,除非您选择迭代ResultSet,否则您无法通过网络发送它包含的数据。”如果
ResultSet
是可序列化的,您认为会有什么不同?或者您不必迭代ResultSet
来序列化对象?谢谢,这很精确。完全回答了为什么部分?ResultSet可以包含成批的数据。这就是“fetchSize()'属性是为。真正的问题是它包含一个活动连接,该连接本质上是不可序列化的。@EJP,根据您的评论,它看起来像ResultSeimpl(驱动程序impl.)包含不可序列化的成员。请让我知道我的理解是否正确。同样,上面的答案似乎不正确,但仍然被接受。但是,在java上下文中,resultset和数组之间的实际区别是什么?您不能从resultset创建一个数组并将其序列化吗?!一个数组
是一种保存数据的数据结构,而ResultSet
包含一个实时连接,在调用时将获取数据。ResultSet还可能包含一批具有急切加载策略的数据,但这取决于驱动程序的实现。