1

我正在用 Java 构建一个应用程序来从 MySQL 数据库中检索数据。执行查询后,我得到一个 ResultSet 并执行以下操作来提取记录:

while (rs.next())
        {
            for (int column = 1; column <= rm.getColumnCount(); column++) {
                row.add(rs.getObject(column));
            }
            result.add(row.toString());
            row.clear();
        }

其中rs = ResultSet 和rm = ResultSetMetaData

问题是我必须做result.add(row.toString()); 而不仅仅是result.add(row); (我想用它创建一个二维 ArrayList)。否则我会得到空的结果。

我试过把row.clear(); 在开始时,在for循环之前,但这会导致我的所有结果都被最后一条记录的多个实例填充。就像row直到最后才添加到结果中,当它等于最后一条记录时。在将 ArrayList行作为元素添加到另一个 ArrayList 之前,我是否需要“提交”它?如果是这样,怎么做?另外,出于好奇,为什么.toString()工作方式不同?

4

1 回答 1

2

通过添加 row.toString(),您正在创建一个新的 String 对象以添加到结果中。

另一方面,通过添加行,您将相同的对象添加到结果中,因此,每次调用 row.clear() 时,都会清空结果中的所有行。

您应该做的是在 for 循环之前创建一个新的行对象,并且不要执行 row.clear()。下面是一个例子。

while (rs.next())
        {
            row = new ArrayList();

            for (int column = 1; column <= rm.getColumnCount(); column++) {
                row.add(rs.getObject(column));
            }

            result.add(row);
        }
于 2008-10-28T23:35:07.957 回答