Java 如何从返回函数保存ArrayList?

Java 如何从返回函数保存ArrayList?,java,jdbc,Java,Jdbc,我不太熟悉操纵ArrayList。在这个问题中,我想保存函数返回的ArrayList。然而,我不知道我是否把它编码错了。有人能帮我吗 我已经检查了我的sql代码,它工作得很好,并且返回了我想要的东西 List ErrorList=新的ArrayList; ErrorList=从process_result中选择Select*,其中status='Error'和mailBefore='No';; 公共列表选择字符串查询{ 列表输出=新的ArrayList; HashMap=null; Statem

我不太熟悉操纵ArrayList。在这个问题中,我想保存函数返回的ArrayList。然而,我不知道我是否把它编码错了。有人能帮我吗

我已经检查了我的sql代码,它工作得很好,并且返回了我想要的东西

List ErrorList=新的ArrayList; ErrorList=从process_result中选择Select*,其中status='Error'和mailBefore='No';; 公共列表选择字符串查询{ 列表输出=新的ArrayList; HashMap=null; Statement=null; 试一试{ 语句=this.conn.createStatement; ResultSet rs=statement.executeQueryStringEscapeUtils.unescapeJavaquery; ResultSetMetaData rsmd=rs.getMetaData; int columnCount=rsmd.getColumnCount; map=新HashMap; 而rs.next{
对于int i=1;i您一直在使用相同的列名和相同映射实例中每一行的数据覆盖映射的键,因此您将得到映射结果集中最后一行的数据,并且输出列表将只有一个条目

而是为ResultSet中的每一行创建一个新的HashMap实例,并将该映射添加到每一行的列表中:

while (rs.next()) {
   map = new HashMap<>(); //create one new map for every row
   for (int i = 1; i <= columnCount; i++ ) {
        map.put(rsmd.getColumnName(i), rs.getString(i));
   }
   output.add(map);
}
我还建议将方法的签名更改为:

public List<Map<String, String>> select(String query)
因此,您不需要将代码与实现耦合

您还需要更改这些行:

List<Map<String, String>> output = new ArrayList<Map<String, String>>();
// do not have a dependency on a particular implementation of the Map API
Map<String, String> map = null; 

在我看来,您的方法中只实例化了一个HashMap实例。您不能简单地将返回类型更改为HashMap,而不是将单个映射放入列表中吗?同样,如果您尝试{block在将映射添加到列表之前抛出SQLException,无论映射中存在什么元素,都将返回一个空列表。