1

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();
        }

ここで、rs = ResultSet およびrm = ResultSetMetaData

問題は、result.add(row.toString());を実行する必要があることです。ただのresult.add(row);ではなく (これを使用して、2 次元の ArrayList を作成したいと思います)。そうしないと、空の結果が得られます。

row.clear();を入れてみました。最初のforループの前ですが、その結果、すべての結果が最後のレコードの複数のインスタンスで埋められます。が最後のレコードと等しい最後まで結果に追加されなかったのと同じように。別の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 に答える