我正在尝试最小化我的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实现它?
答案 0 :(得分:2)
只需在SQL中执行!
您需要的只是SQL语句中的一个简单的“ORDER BY ID”。
在SQL中进行集合操作几乎总是更有效率和有效。要记住的关键点是编写查询引擎的人比你或我更好的程序员,他们可能已经调整SQL引擎的时间比你编程的时间长。
答案 1 :(得分:1)
听起来您应该可以使用从一个SQL语句中的另一个查询的结果中选择的子查询来执行此操作。
这是一个链接: http://beginner-sql-tutorial.com/sql-subquery.htm
实际上重新阅读你的问题听起来更像是你只需要添加到where子句的内容,ID ='123ABC'
答案 2 :(得分:0)
您必须将完整的结果集复制到另一个数据结构中才能使用其“内容”。通常的方法是创建一个可以保存单行(aka: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值的行,则应考虑创建仅返回行WHERE ID='MyID'
的值的SQL SELECT命令。