I have the following structure:
List -->List_Participant -->Participant
so a list may contain several participants.I try to read this in java:
Nested query ?
Something like Select * from List_Participant where name in (select name from List);
This can be made to work for your third tabel as well.
Here is the reason why you can't have two ResultSet
opened from the same Statement
ResultSet javadoc :
A ResultSet object is automatically closed when the Statement object that generated it is closed, re-executed, or used to retrieve the next result from a sequence of multiple results.
So basicly, a Statement
can only give you one ResultSet
at a time, so you loose the first result when you execute the second query.
Solution :
Statement
per ResultSet
needed.You can try using two different Statement
instances for each query. See the JavaDoc for java.sql.Statement. The following example shows the principle.
Statement statement1 = connection.createStatement();
Statement statement2 = connection.createStatement();
ResultSet resultSet1 = statement1.executeQuery("select * from list");
while(resultSet1.next()){
String name = resultSet1.getString("Name");
ResultSet resultSet2 = statement2.executeQuery("select * from List_Participant where name= '"+name+"'");
while(resultSet2.next()){
// get the participants
}
}
BUT: This is not standard usage of JDBC or SQL for good reasons. It deprives the database of any optimization possibility and moves to much data between the DB and your app for no good reason (See the comments of JohnSkeet and BalusC).
Better use appropriate JOIN
sin your one and only statement. This can be optimized by the DB:
SELECT lp.* FROM list l JOIN List_Participant lp ON l.name = lp.name
Add any filters/conditions you like to minimize the data retrieved.