有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java结果集到通用列表中

我需要在列表中添加一个结果集。传递给该方法的字符串是一个SQL select语句。DB连接方法与这个类中的所有其他方法都能完美地工作,所以这不是问题所在。我知道我可以用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) 个答案

  1. # 1 楼答案

    null值初始化listOfLists。尝试从一开始就实例化它:

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

    更多信息: