【问题标题】:Select records from ResultSet java从 ResultSet java 中选择记录
【发布时间】:2013-05-24 09:39:08
【问题描述】:

我在 Java 中有一个长查询,它被放入结果集中并由 executeQuery(string) 方法执行。现在我需要遍历这个结果集,查询结果集中的每条记录(get_linked_OrgTickets 方法包含这个查询),并且只输出那些从 ResultSet 中返回 Vector linkedToTicket 内容的行。我可以遍历这个 ResultSet 并将所述行复制到另一个结果集中,或者删除不从 ResultSet 输出的行吗?还有其他方法可以解决这个问题吗?

if (linked == J.LINKED_TO_ORG){
    while (rs.next()){
           Vector linkedToTicket = Ticket.get_linked_OrgTickets(con, rs.getInt(Ticket.FLD_ID)); 

           if (linkedToTicket != null)
           {                                
          // if there are linked tickets in the result set, output them only

        }
    }
}

*编辑:* 这些子查询不能与主查询集成。唯一的方法是在没有这个的情况下执行一次主查询,第二次包含它,这太低效了。 ResultSet 类似乎不包含在不影响数据库的情况下删除行或“手动”构建 ResultSet 的方法。

请帮忙!

【问题讨论】:

  • 那么,这个 sn-p 失败在哪里?你试过什么?
  • 这将取决于get_linked_OrgTickets 的逻辑和您的查询。您的“过滤器”可能是第一个查询的一部分。
  • 它不能成为第一个查询的一部分,因为我需要获取由多个条件返回的票证的 ID,并检查这些 ID 是否与其他 ID 相关联。

标签: java sql resultset


【解决方案1】:

也许您可以操纵结果集中的光标并获取正确的数据。像这样的

Statement stmt = connection.createStatement(
            ResultSet.TYPE_SCROLL_SENSITIVE, 
            ResultSet.CONCUR_UPDATABLE);
ResultSet resultSet = stmt.executeQuery(
            " SELECT col1 FROM tablename");
rs.absolute(5); // moves the cursor to the fifth row of rs
String field = rs.getString("MY_FIELD");

但是,注意不要调用updaterow,因为你会修改底层数据行

【讨论】:

  • 感谢@fgo 的回答:) 你知道我是否可以手动将这些行插入另一个结果集中吗?
猜你喜欢
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多