この問題に適切なタイトルを付けるには、私の創造性の欠如をお許しください。
こんにちは、私はこの問題を理解しようと過去 3 時間を費やしました。私はそれを理解したと思いますが、それに対する解決策はまだ私を逃れています。私はこの非常に単純なコードを持っています。
Statement stmt = db.getStatement();
ResultSet queryResult = stmt.executeQuery("SELECT * FROM users");
while(queryResult.next()) {
username = queryResult.getString("username");
password = queryResult.getString("password");
privilege = queryResult.getInt("privilege");
queryResult = stmt.executeQuery("SELECT * FROM division");
while(queryResult.next()) {}
users.add(new User(username, password, privilege));
}
さて、このコードの一部は、私のコードの問題が何であるかを説明するために単純化されています。明らかに、何も含まれていないwhileループはありません。
データベースから何かをフェッチしたいときはいつでも、結果セットを 1 つのループ内でしか実行できないことに気付きました。"nested-resultset-loop" を記述すると、"Operation... ResultSet closed"、"Cannot find column 'username'"、またはその他のエラーが発生します。
データベースからすべてを取得するために、DAO コード全体でこれらのネストされた結果セット ループが多数あります。私は MySQL にあまり詳しくないので、これが単純な解決策でした (このプログラムを実行する時間がほとんどありません)...以前は PHP で同様のことをしていたので。
このコードが良い設計だと言っているわけではありませんが、時間の都合上、現時点では優れたクラス設計についてあまり気にしていません。したがって、設計の選択が不十分であっても、あなたが考えている解決策は歓迎されます。
別の解決策は、すべてを単一のループに分割することです。これは機能する傾向があるためです (非常に簡単です)。しかし、それは多くのコードを変更することを意味し、これをバックアップ計画にしたいと思います.