質問
MySQLデータベースからデータを取得するためのアプリケーションをJavaで構築しています。クエリを実行した後、ResultSetを取得し、以下を実行してレコードを抽出します。
while (rs.next())
{
for (int column = 1; column <= rm.getColumnCount(); column++) {
row.add(rs.getObject(column));
}
result.add(row.toString());
row.clear();
}
where rs = ResultSetおよび rm = ResultSetMetaData
問題は、単に result.add(row); ではなく result.add(row.toString()); を実行する必要があることです'2次元のArrayListを作成したい)。そうしないと、空の結果が表示されます。
row.clear(); を最初に for ループの前に配置しようとしましたが、その結果、すべての結果が最後の記録。 row が最後のレコードと等しい最後まで結果に追加されなかったように。 「コミット」する必要がありますか? ArrayList row を別のArrayListに要素として追加する前に?もしそうなら、どのように? また、好奇心から、 .toString()の動作が異なるのはなぜですか?
解決
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);
}
所属していません StackOverflow