티스토리 뷰
private void searchMem(HttpServletRequest request, HttpServletResponse response) throws ClassNotFoundException, SQLException, ServletException, IOException {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","hr","hr");
pstmt = conn.prepareStatement("select employee_id, first_name, last_name from employees where employee_id = ?",ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
pstmt.setString(1, request.getParameter("id"));
ResultSet rs = pstmt.executeQuery();
pstmt.close();
conn.close();
if(rs.next()==false){
rs.close();
request.getRequestDispatcher("/noSearchMem").forward(request, response);
}else{
request.setAttribute("result", rs);
request.getRequestDispatcher("/memShow").forward(request, response);
}
}
과제 도중에 접근을 잘못해서 위와 같이 pstmt.executeQuery를 통해 나온 결과를 ResultSet에 저장하였고,
그 ResultSet의 next()의 false 여부에 따라 불러온 데이터가 없으면 /noSearchMem 서브릿으로 이동하고
있으면 /memShow 로 이동하도록 구현하였다. 이 때, 이동하기전에 close의 안정성을 위해서 pstmt.close()와 conn.close() 실행하고 나서 이동한 페이지에서 ResultSet의 값을 사용하려고 하였으나, 문제가 발생하였다.
즉, connection이 닫히면 statement가 닫히고, statement가 닫히면 resultset이 닫힌다는 사실을 모르고 있었기 때문에 발생하였다.
다음은 위와 관련한 문제에 대한 원인과 해결책에 대해 다루고 있다.
[펌]
http://egloos.zum.com/benelog/v/1898928
'Jsp&Servlet' 카테고리의 다른 글
쿠키 생성 및 저장 오류 및 문제점, 해결 (0) | 2017.01.24 |
---|---|
Cookie와 HttpSession (0) | 2017.01.23 |
ServletContext, HttpSession, HttpServletRequest 차이점 (0) | 2017.01.23 |
Servlet 한글 처리 (0) | 2017.01.23 |
get방식과 post 방식에서 쿼리 문자열 가져오기 (0) | 2017.01.23 |