【问题标题】:Filtering rows from a resultset从结果集中过滤行
【发布时间】:2019-03-22 13:52:45
【问题描述】:

我创建了一个返回结果集的 java 方法,如下所示:

String query = "SELECT * FROM "+table_name+" WHERE "+parameter+ " = " +condition;
ResultSet rs = stmt.excecuteQuery(query);
return rs;

我的理解是 ResultSet 可以像一个 SQL 表,我正在寻找一种方法来进一步从这个结果集中选择特定的行。

类似于另一种方法:

public ResultSet filterRS (ResultSet rs){
String query = "SELECT * FROM "+rs+" WHERE "+new_parameter+ " = " +new_condition;
ResultSet rs_new = stmt.excecuteQuery(query);
return rs_new;
}

我已阅读文档,但没有说明如何执行此操作。是否可以通过简单的方式实现?

【问题讨论】:

    标签: java mysql resultset


    【解决方案1】:

    请注意:您不应该这样联系您的查询。 您应该像这样绑定语句中的参数:

        String queryString = "SELECT * FROM FOO WHER BAR = ?1 ";
        Query q = em.createNativeQuery(queryString);
        q.setParameter(1, conditionGoesHere);
        List <Result> result = (TCiletEpsTracking) query.getResultList();
    

    获得结果集后,您可以通过多种方式进行操作。我一直采用老式的方式循环整个结果集,如果满足我的条件,则将条目添加到列表中。

    如果您使用的是 Java 8,我认为使用流对您来说可能会更好。这里有一些文献:https://beginnersbook.com/2017/10/java-8-stream-filter/

    【讨论】:

    • 虽然技术上可行,但这种解决方案效率很低。它破坏了数据库端的所有优化。
    • 我同意,如果数据库中有您用来过滤结果的数据,那么您应该在那里进行。如果过滤必须在 Java 端完成,那是我所知道的最佳选择。
    【解决方案2】:

    不,你不能。

    需要在第一个查询中指定所有过滤条件,如:

    select * from my_table
    WHERE column1 = x
      AND column2 = y
    

    然后,您运行此 SQL 并获得所需的行。您可以使用ANDOR 的任意组合。

    【讨论】:

      猜你喜欢
      • 2011-10-05
      • 2013-02-22
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      • 2019-01-23
      • 2013-04-20
      相关资源
      最近更新 更多