【发布时间】:2012-01-24 15:53:54
【问题描述】:
我有以下结构:
列表 -->List_Participant -->参与者
所以一个列表可能包含多个参与者。我尝试在 java 中阅读:
stat = con.createStatement();
ResultSet rs = stat.executeQuery("select * from list;");
// get the informations about the bracket sheet
while (rs.next()) {
string name = rs.getString("Name");
ResultSet rs2 = stat.executeQuery("select * from List_Participant where name= '"+name+"';");
while (rs2.next()) {
// get the participants
}
rs2.close();
}
rs.close();
但这不起作用。我没有收到异常或任何其他输出。我建议打开第二个结果集将关闭第一个结果集,因为因为我做了第一个结果集,所以将数据存储在一个数组列表中并关闭它,然后第二个它会起作用,但这会导致性能不佳,因为我必须始终搜索数组列表。
什么可能是更好的解决方案?
编辑:解决方案是加入,我目前的尝试:
select * from List_participant
INNER JOIN List ON List.name = List_participant.List
INNER JOIN participant ON List_participant.participant =participant.ROWID;
由于它们可能具有相同的名称,我现在如何处理这些列?
【问题讨论】:
-
您没有在数据库中进行联接的任何原因?似乎是显而易见的解决方案。
-
您应该尽可能将作业委托给 SQL 语言,以便它仅在一个 SQL 查询中返回完全您想要的结果。这对 Java 和 DB 来说都是双赢的。了解
JOIN子句。 -
@JonSkeet:确实。我只是不习惯 SQL。我如何一次进行两个联接?这样我就可以得到所有列表中的所有参与者。我用我的现状更新了答案。乔恩请写下您的评论作为答案,以便我标记它!
-
@Anthea:还不如选择 A.H. 的回答 :)