kumareloaded
kumareloaded

Reputation: 3952

Reading all rows from database and putting them into ArrayList - Java

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

Answers (3)

Anderson Vieira
Anderson Vieira

Reputation: 9049

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;

Upvotes: 1

uraimo
uraimo

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

Konstantin Yovkov
Konstantin Yovkov

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

Related Questions