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

时间:2015-03-18 13:43:46

标签: java jdbc arraylist

我是以下代码,

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]]

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

我该怎么办?

有人能帮助我吗?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

  1. 重新初始化inner列表
  2. 填写inner列表
  3. 将此版本的inner列表存储在outer列表中。
  4. 我还会在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;