Reputation: 3952
I've the below code,
ArrayList<ArrayList<String>> outer = new ArrayList<ArrayList<String>>();
ArrayList<String> inner = new ArrayList<String>();
ResultSet rs = statement.executeQuery(sqlQuery);
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
while (rs.next()) {
for(int i=1; i<=columnsNumber; i++){
inner.add(rs.getString(i));
}
}
outer.add(inner);
return outer;
What I get for outer is something like this
[[100, 200, 300, 100, 200, 300]]
What I'm trying to get is
[[100, 200, 300], [100, 200, 300]]
I want each row to be an unique item in the list, but what I get is a list of all rows in one item in the list.
How do I do it?
Can someone help me out?
Upvotes: 1
Views: 7740
Reputation: 9049
Since outer
is a list of lists, in each iteration of the while
loop you will need to:
inner
listinner
listinner
list in the outer
list.I would also keep the inner
declaration inside the while
loop to limit its scope, like this:
List<List<String>> outer = new ArrayList<>();
ResultSet rs = statement.executeQuery(sqlQuery);
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
while (rs.next()) {
List<String> inner = new ArrayList<>();
for(int i = 1; i <= columnsNumber; i++) {
inner.add(rs.getString(i));
}
outer.add(inner);
}
return outer;
Upvotes: 1
Reputation: 19821
Create a new inner for each record and add it to outer.
ArrayList<String> inner;
ResultSet rs = statement.executeQuery(sqlQuery);
ResultSetMetaData rsmd = rs.getMetaData();
while (rs.next()) {
inner = new ArrayList<String>();
for(int i=1; i<=columnsNumber; i++){
inner.add(rs.getString(i));
}
outer.add(inner);
}
Upvotes: 3
Reputation: 62864
On each step of the while
loop, you have to re-initialize the inner
list with an empty one and and add it to the outer
list before the step has finished:
while (rs.next()) {
inner = new ArrayList<String>();
for(int i=1; i<=columnsNumber; i++){
inner.add(rs.getString(i));
}
outer.add(inner);
}
Upvotes: 2