【问题标题】:How to duplicate database ResultSet如何复制数据库结果集
【发布时间】:2011-10-15 10:36:30
【问题描述】:

我想在 JSP 页面中复制从 Oracle 数据库获得的 ResultSet。我认为一个简单的重新分配就可以解决问题,但它似乎失败了。这是我的代码:

ResultSet rset;
ResultSet new_rset;

rset = alljobsBean.getStatus(conn,1,max ,min );
new_rset = rset;

这是错的吗?或者有什么特殊的方法可以复制我不知道的ResultSets?

【问题讨论】:

  • (你知道给另一个变量赋值不会复制它,对吧?)
  • 确实,我的想法很糟糕。但是这样做是因为我不想再次查询数据库以获取新的结果集。我只是想在JSP页面上显示时,将重复的RS并进行不同的修改。
  • 那么就在你的 JSP 上循环两次,每次显示都不一样
  • 它不起作用..它总是说“Exhausted ResultSet”我认为你只能循环遍历一个 ResultSet 一次。不过我可能错了。

标签: java oracle jsp resultset


【解决方案1】:

没有复制ResultSet 的标准方法,除了读取所有数据并将其存储在其他地方。原因是大多数ResultSet 实现不会在其中存储所有结果,而只是保持与用于根据需要获取结果的数据库的连接。

【讨论】:

    【解决方案2】:

    new_rset = rset; 不执行任何复制。它只是将new_rset 指向rset 指向的同一个对象,new_rsetrset 都只是对堆上同一个对象的引用。

    如果您需要在 JSP 中复制 ResultSet,请考虑使用 DTOs,它将包含 ResultSet 中的所有数据,这样您就不需要在视图中保留对 ResultSet 的引用。使用 DTO 可以让您在读完 ResultSet 后关闭连接,同时您可以继续在视图中访问 SQL 查询返回的数据。

    如果您打算断开对数据的访问,您也可以考虑使用断开连接的RowSet 而不是ResultSet,采用与ResultSet 类似的方式,具有不必保留与数据库。

    【讨论】:

      【解决方案3】:

      如果您要从数据库中获取 ResultSet 并将其显示在 JSP 页面中,您可以考虑使用 CachedRowSet。如果您的目标更加雄心勃勃,您可以考虑使用 WebRowSet。但是对于 80% 的需求,您最好将数据从 ResultSet 加载到某些 DTO 中,然后再将其传递给 JSP。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-28
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 1970-01-01
        • 1970-01-01
        • 2017-05-28
        相关资源
        最近更新 更多