-4

我需要根据某些唯一标识符从结果集中删除重复值。

我需要从结果集中删除重复项。

  while(resultSet.next())
  {     
   int seqNo = resultSet.getInt("SEQUENCE_NO");

   String tableName = resultSet.getString("TABLE_NAME");

   String columnName = resultSet.getString("COLUMN_NAME");

  String filter = resultSet.getString("FILTER");

 }

从上面的迭代中,我从结果集中得到 2 行。有相同的序列号,相同的表名,不同的列名,相同的过滤器。

1 PRODUCTFEES CHARGETYPE PRODUCTID

1 PRODUCTFEES PRODUCTCODE PRODUCTID

我的要求是删除重复的表名、重复的序列号、重复的过滤器。

我想在下面输出一些东西,

1 PRODUCTFEES CHARGETYPE PRODUCTCODE PRODUCTID
4

2 回答 2

0

通过您提供的示例,您似乎想要单独输出每列的所有不同值(表中有 4 列,但您输出 5 个值)。

作为标记的问题java,您可以采取的一种方法是Set对每一列使用实现,这样重复就不会通过。然后输出每个 的所有元素Set

LinkedHashSet[] sets = new LinkedHashSet[]{
    new LinkedHashSet(), 
    new LinkedHashSet(),
    new LinkedHashSet(),
    new LinkedHashSet() };

while(resultSet.next()) {     
    sets[0].add(resultSet.getInt("SEQUENCE_NO"));
    sets[1].add(resultSet.getString("TABLE_NAME")););
    sets[2].add(resultSet.getString("COLUMN_NAME"));
    sets[3].add(resultSet.getString("FILTER"));
}

StringBuilder buf = new StringBuilder();
for (LinkedHashSet set : sets) {
    // append to buf all elements of each set
}

但是从同一个 SQL 查询中解决这个问题可能更简单,只需SELECT DISTINCT columnX为每一列生成并输出结果而无需进一步操作。或者使用将连接所有不同值的聚合函数。实现将高度依赖于您使用的 DBMS(GROUP_CONCAT对于 MySQL,LISTAGG对于 Oracle,...)。对于 Oracle,这将是一个类似的问题:How to use Oracle's LISTAGG function with a unique filter?

于 2013-02-01T11:11:09.127 回答
0

根据我要说的不同输出,您不仅需要删除重复项,还需要对重复项中的数据进行重新排序。

在这种情况下,您需要在 中填充一个新的数据数组(或类似结构)while(resultSet.next()),然后在新排列的数据对象上循环并相应地输出。

在 Meta-Lang 中,这将如下所示:

while resultset.next()
    if newdata-array has unique key
        add column-name to found entry in newdata-array
    else
        create new entry in newdata-array with column-name

while newdata-array.next()
    output seq, table-name
    while entry.column-names.next()
        output column-name
    output product-id
于 2013-02-01T11:17:24.470 回答