【问题标题】:How can I get previous item in resultset?如何获取结果集中的上一个项目?
【发布时间】:2011-07-28 15:13:36
【问题描述】:

假设我们有这个查询:

ResultSet result = ("select * from table_name");

现在我们可以从这个表单的结果中获取信息

while(result.next())
{
  .
  .
  .
}

但是以这种形式我们可以继续前进。 现在我想知道该结果是否可以恢复?

例如我们得到信息name='sam', fname='nic'。接下来我想回去再次获取这些信息。

有可能吗?

【问题讨论】:

    标签: java mysql netbeans


    【解决方案1】:

    是的,JDBC 支持这一点。您需要一个可滚动的结果集

    类似这样的:

    Statement st = conn.createStatement(
       ResultSet.TYPE_SCROLL_INSENSITIVE, 
       ResultSet.CONCUR_READ_ONLY
    );
    ResultSet rs = st.executeQuery("select * from table_name");
    

    然后您只需使用 ResultSet 对象 rs 在结果中移动:

    1. 首先
    2. 绝对的
    3. 最后
    4. 下一个
    5. 上一页

    是可以帮助您导航的方法。

    【讨论】:

    • 您知道previousfirstlast 操作是否很快,或者在将光标放在正确位置之前它们必须在内部处理完整的 ResultSet? (这样他们可能会在相对较小的集合上快速运行,但会在数千个元素的集合上开始出现性能问题)
    • @WallTearer 它将取决于驱动器的实现。但我认为它们既快速又聪明(在需要之前不会将所有内容转移到客户端)。
    【解决方案2】:

    当您创建一个不向其传递参数的语句时,它默认为 ResultSet.TYPE_FORWARD_ONLY

    Statement st = con.createStatement();
    

    如果您希望能够向后滚动,请将第一个参数设置为 ResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_SENSITIVE。 (对他人对数据库的更改不敏感或敏感。)

    Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    

    CONCUR_UPDATABLE 将允许您根据需要更新 ResultSet,除非您不需要,在这种情况下您将其设置为 CONCUR_READ_ONLY

    阅读this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多