从数据库中读取所有行并将它们放入 ArrayList - Java

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

我有下面的代码,

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;

我得到的外部是这样的

[[100, 200, 300, 100, 200, 300]]

我想得到的是

[[100, 200, 300], [100, 200, 300]]

我希望每一行都是列表中的唯一项,但我得到的是列表中一项中所有行的列表。

我该怎么做?

有人可以帮我吗?

while 循环的每一步中,您必须用一个空列表重新初始化 inner 列表,并在该步骤执行之前将其添加到 outer 列表中完成:

while (rs.next()) {
    inner = new ArrayList<String>();
    for(int i=1; i<=columnsNumber; i++){
        inner.add(rs.getString(i));
    }                   
    outer.add(inner);
}

为每条记录创建一个新的内部并将其添加到外部。

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

由于 outer 是一个列表列表,在 while 循环的每次迭代中,您需要:

  1. 重新初始化 inner 列表
  2. 填写 inner 列表
  3. 将此版本的 inner 列表存储在 outer 列表中。

我还会将 inner 声明保留在 while 循环中以限制其范围,如下所示:

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;