我正在使用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)。否则我得到空的结果。

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

有帮助吗?

解决方案

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

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

你应该做的是在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);
        }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top