ResultSet到通用列表列表

时间:2013-08-22 00:32:16

标签: java sql list generics arraylist

我需要将ResultSet添加到列表列表中。传递给该方法的字符串是SQL select语句。数据库连接方法与此类中的所有其他方法完美配合,因此这不是问题。我知道我可以用List替换一些ArrayList声明,但在这种情况下我认为不重要。

public static ArrayList<ArrayList> selectStatement(String string) throws SQLException {
    ArrayList<ArrayList> listOfLists = null;
    ArrayList list;
    String[] record = null;
    try {
        rs = null;
        dBConnectionOpen();
        rs = st.executeQuery(string);
        ResultSetMetaData metaData = rs.getMetaData();
        int columns = metaData.getColumnCount();
        while (rs.next()) {
            list = null;
            record = new String[columns];
            for (int i = 1; i < columns; i++) {
                record[i - 1] = rs.getString(i);
            }
            list = new ArrayList(Arrays.asList(record));
            listOfLists.add(list);
        }
    } catch (Exception e) {
    } finally {
        dBConnectionClose();
    }
    return listOfLists;
}

我以前做过这个,但由于某种原因,这次它不会起作用。我在这里缺少什么?

1 个答案:

答案 0 :(得分:6)

您使用listOfLists值初始化null。尝试从头开始实例化它:

ArrayList<ArrayList> listOfLists = new ArrayList<ArrayList>();

此外,它会更好:

  • 使用List界面而不是普通ArrayList类实现
  • 使用List<String>代替原始List
  • 不使用String[] record,而是直接将数据保存在List<String>
  • 保持变量范围尽可能短。 List<String> list可以直接在while循环中。

知道这一点,代码可以改为:

List<List<String>> listOfLists = new ArrayList<List<String>>();
...
while (rs.next()) {
    List<String> list = new ArrayList<String>();
    for (int i = 1; i < columns; i++) {
        list.add(rs.getString(i));
    }
    listOfLists.add(list);
}

更多信息: