下記のようなfindAllのメソッドがあり、これを実行すると必ずエラーになるのでその理由を説明するように言われたのですが理由がよくわかりません。
public class LoginDao extends DBconnectDao{ private static final String url = "jdbc:mysql://localhost:3306/test"; private static final String user = "root"; private static final String password = ""; private static Connection conn = null; // Connectionクラス private static PreparedStatement pstmt = null; // Statementクラス private static ResultSet rs = null; // ResultSetクラス public ArrayList<LoginInfoDto> findAll() { ArrayList<LoginInfoDto> loginInfos = new ArrayList<LoginInfoDto>(); // SQL文 // ログインIDとパスワードのカラム情報を取り出す String sql = "SELECT login_id, password FROM login_info"; try { Class.forName("com.mysql.jdbc.Driver"); // ドライバクラスのロード // Connection,Statement,ResultSetのクラスを作成 conn = DriverManager.getConnection(URL, USER, PASSWORD); // Connectionクラス生成 pstmt = conn.prepareStatement(sql); // Statementクラス生成 rs = pstmt.executeQuery(); // ResultSetクラス生成 while (rs.next()) { // 結果表からデータを取得 LoginInfoDto login = new LoginInfoDto(); login.setLoginId(rs.getString("login_id")); login.setLoginPassword(rs.getString("password")); loginInfos.add(login); } } catch (Exception e) { e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (Exception e) { e.printStackTrace(); } rs = null; } if (pstmt != null) { try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } pstmt = null; } if (conn != null) { try { conn.close(); } catch (Exception e) { e.printStackTrace(); } conn = null; } } return loginInfos; }
デバックを使用して調べてみると確かにloginに値を入れ終わって
while (rs.next()) {
に戻ると、その次には
} catch (Exception e) {
に飛んでしまいます。
どういう動作になっているかまではわかったのですがその理由が説明できません。
これはどういうことなのでしょうか?
catchでスタックトレースを出力していますよね?それを載せてください。