質問

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);
        }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top