我正在使用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(); ,但这会导致我的所有结果都被多个实例填充最后一项记录就像行没有添加到结果直到最后,当它等于最后一条记录时。在将其作为elemt添加到另一个ArrayList之前,是否需要“提交”ArrayList 行?如果是这样,怎么样? 另外,出于好奇,为什么 .toString()的工作方式不同?
答案 0 :(得分:2)
通过添加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);
}