【问题标题】:Mulitiple Result Set based on certain conditions on a jsp基于jsp上某些条件的多个结果集
【发布时间】:2013-10-31 03:46:13
【问题描述】:

我正在根据某些条件打印两个结果集。第一个结果集包含日期大于 1 天的数据。第二个结果集打印日期大于 2 天的表。但在我的第二个表中,数据包含第一个表的。如何打印第二个表而不从第一个表中重复行。(日期是表的列之一)

这两个表都是由同一个查询生成的。 我必须用 java 写这个,我不能改变我的查询。 使用 java 代码过滤重复数据需要做什么?

【问题讨论】:

  • 您能告诉我们到目前为止您尝试过什么吗?
  • 我用 mysql 查询尝试过,但没有得到想要的输出。所以我搜索了一下,发现我需要使用 Set 来避免重复。但我不知道我应该怎么做继续?
  • 我建议您在打印时将 id 添加到列表中。下次在打印之前检查 list.contains() 该元素。但这对于大量数据来说并不是很好

标签: java jsp resultset


【解决方案1】:

您可以使用 HashMap 来避免重复键。

    ResultSet rs1 = ... // here goes your first result set
    ResultSet rs2 = ... // here goes your second result set

    // TableRow is a class you can create which contains the fields of your result set
    // including the primary key
    HashMap<String, TableRow> hm = new HashMap<String, TableRow>();

    // First you insert the rows from Result Set 1
    while (rs1.next()) {
        // Obtain primary key
        String pk = rs1.getString("pkey");
        // Obtain fields
        String field1 = rs1.getString("field1");
        String field2 = rs1.getString("field2");
        // ...up to fieldN
        TableRow tr = new TableRow(pk, field1, field2, ...);
        hm.put(pk, TableRow);
    }

    // Then you insert the rows from Result Set 2
    while (rs2.next()) {
        // Obtain primary key
        String pk = rs2.getString("pkey");
        // Obtain fields
        String field1 = rs2.getString("field1");
        String field2 = rs2.getString("field2");
        // ...up to fieldN
        TableRow tr = new TableRow(pk, field1, field2, ...);
        hm.put(pk, TableRow);
    }

HashMap 将避免重复键。如果每一行的日期都是唯一的,那么也可以将日期作为HashMap的key。

【讨论】:

  • 为什么我需要 TableRow 类和字段(我需要在结果集中显示)及其获取器和设置器?
  • 实际上,TableRow 类只是每行中所有字段的包装器,因为 ResultSet 没有将整行作为单个对象返回的“getRow()”函数。您可以使用简单的构造函数将 TableRow 定义为当前类中的私有静态类,没有 getter/setter,并检索每个字段,如 tr.field1、tr.field2 等。另一个解决方案是将字段列表存储在用逗号分隔的单个字符串,然后只需执行 string.split(",") 即可获取字段值列表。
  • 谢谢你的回答。我直接在 jsp 上打印结果集。我用字段的 getter 和 setter 分别生成了 TableRow 类。我在 jsp 上使用了 HashMap ,但是如果我我使用相同的结果集并根据条件循环
  • 我尝试使用上面的代码,但仍然在第二个结果集中得到重复的行。请帮助我???在第二个结果集中我不应该得到重复。
  • 我不太了解您关于根据条件循环的问题,但是一旦将两个结果集都添加到 HashMap 中,您可以通过使用获取值的集合(TableRow 实例)来遍历它值()方法。例如:for (TableRow tr : hm.values()) { ` // 操作表行` } 如果您确实使用了唯一键(hm.put() 方法的第一个参数),那么 HashMap 实例中不应有任何重复的行.您也可以尝试使用您的日期列作为 HashMap 键,只要它是唯一的时间戳。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多