【问题标题】:How do I search a resultset in java?如何在java中搜索结果集?
【发布时间】:2010-11-05 06:04:11
【问题描述】:

我正在尝试最小化我的 SQL 查询,因此我的决定是列出我需要的所有记录的 ID。这样做,通过一次查询,我可以获得有关某个 ID 的所有信息。

ID          Passed      flag    type    Total
123ABC      878         0       1       1070
123ABC      1272        0       1       1507
123ABC      1152        0       1       1342
123ABC      0           0       2       0
123ABC      1045        0       1       1214
123ABC      1270        0       1       1471
123ABC      0           0       1       0
123ABC      476         0       2       787
123ABC      96          0       2       158
123ABC      23          0       3       70
123ABC      11          0       2       42
987ZYX      77          1       2       135
987ZYX      0           1       2       0
987ZYX      0           1       2       0
123ABC      487         1       2       513
123ABC      1           1       2       3
987ZYX      293         0       2       759
987ZYX      5611        0       1       6386
987ZYX      0           0       2       0
987ZYX      0           0       3       0

上表显示了我在运行查询后得到的结果示例。 问题是,我需要遍历我的 ID 列表并从该结果集中获取与该 ID 相关的所有记录。是否可以将此表(实际上是 ResultSet 对象)转换为 ArrayList 或 HashMap 以便于索引,或者我可以使用实际的 ResultSet 来实现它吗?

【问题讨论】:

  • ResultSet 充当普通的迭代器,因此您必须将数据转换为 HashMap。

标签: java sql resultset


【解决方案1】:

只需在 SQL 中执行!

您只需要在 SQL 语句中添加一个简单的“ORDER BY ID”即可。

在 SQL 中进行集合操作几乎总是更加高效和有效。要记住的关键点是,编写查询引擎的人是比你或我更好的程序员,而且他们调优 SQL 引擎的时间可能比你编程的时间长。

【讨论】:

    【解决方案2】:

    听起来您应该能够使用从一个 SQL 语句中另一个查询的结果中选择的子查询来执行此操作。

    这是一个链接: http://beginner-sql-tutorial.com/sql-subquery.htm

    实际上重新阅读您的问题听起来更像是您只需要在 where 子句中添加一些类似于 where ID = '123ABC' 的内容

    【讨论】:

    • 我认为如果我可以披露的信息数量有限,真的很难将我的问题表述为正确的问题形式。无论如何,我正在遍历目录并解析其中的文件,然后在该结果集上查找它们的记录。这使得您使用 where 子句的建议不正确。
    【解决方案3】:

    您必须将完整的结果集复制到另一个数据结构中才能使用其“内容”。通常的方法是创建一个可以保存单行值的类(又名:bean):

     class Data {
       private String id;
       private int passed;
       private boolean flag;
       private int type;   // or an enum, if "types have names"
       private int total;
       public Data(){};
       // getters, setters for all fields
     }
    

    读取表格后,创建一个集合并为每一行添加一个 bean:

     List<Data> result = new ArrayList<Data>();
     while (rs.next()) {
       Data data = new Data();
       data.setId(rs.getString(0));
       // ..
     }
    

    现在我们有了一个集合,我们可以在其中处理表格的实际内容。


    如果你想过滤数据,比如只读取具有特定 ID 值的行,你应该考虑创建一个 SQL SELECT 命令,它只返回行 WHERE ID='MyID' 的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-06
      • 2012-12-13
      • 2014-07-02
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      相关资源
      最近更新 更多