1

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?

0

3 Answers 3

3

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);               
}
Sign up to request clarification or add additional context in comments.

1 Comment

You are a genious. It helped me buddy
2

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);
}

Comments

1

Since outer is a list of lists, in each iteration of the while loop you will need to:

  1. Reinitialize the inner list
  2. Fill the inner list
  3. Store this version of the inner 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;

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.