servlet중첩 쿼리문 질문이요 500에러가 나요 ㅠㅠㅠㅠ
조회수 495회
호텔예약관리 프로젝트를 하고 있는데요. 특정기간에 예약이 잡혀있는 방들을 제외하고 예약가능한 방만 표시하는 쿼리문을 만들었는데 실행하면 selectP22?checkin1=2020-11-18&checkout1=2020-11-18&roomtype=SweetRoom:1 Failed to load resource: the server responded with a status of 500 (Internal Server Error) 에러가 나네요. 간단한 sql문일때는 이 오류가 안나는데 밑의 sql문으로 시도하면 에러가 납니다. 이걸 어떻게 수정해야 할까여 .. 잘 몰라서 질문드립니다.
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
String checkin1 = request.getParameter("checkin1");
System.out.println(checkin1);
String checkout1 = request.getParameter("checkout1");
System.out.println(checkout1);
String roomtype = request.getParameter("roomtype");
System.out.println(roomtype);
url="jdbc:oracle:thin:@localhost:1521:orcl";
userid="";//가림
passwd=""; //가림
Connection conn=null;
PreparedStatement stmt=null;
ResultSet rs=null;
PrintWriter out=response.getWriter();
try {
String sql="select * from roommanage where room_id not in "
+ "(select room_id from bookmanage where (check_indate>TO_DATE(?) and check_indate<TO_DATE(?) or "
+ "(check_outdate >TO_DATE(?) and check_outdate<TO_DATE(?)))) and room_type like ?;";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url,userid,passwd);
stmt=conn.prepareStatement(sql);
System.out.println(sql);
stmt.setString(1, checkin1);
stmt.setString(2, checkout1);
stmt.setString(3, checkin1);
stmt.setString(4, checkout1);
stmt.setString(5, roomtype);
rs=stmt.executeQuery();
JSONArray ja = new JSONArray();
while(rs.next()) {
JSONObject jo =new JSONObject();
jo.put("roomid",rs.getString("ROOM_ID"));
jo.put("roomname",rs.getString("ROOM_NAME"));
jo.put("roomtype",rs.getString("ROOM_TYPE"));
jo.put("howmuch",rs.getInt("HOWMUCH"));
jo.put("howmany",rs.getInt("HOWMANY"));
ja.add(jo);
}
out.println(ja.toString());
out.close();
} catch(Exception e) {
out.println("error");
} finally {
try {
conn.close();
stmt.close();
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
여는괄호 닫는괄호 갯수 문제 같아요. 아래 쿼리로 괜찮은지 확인해 보시겠어요?
SELECT * FROM roommanage r WHERE r.room_id NOT IN ( SELECT b.room_id FROM bookmanage b WHERE ( (b.check_indate > TO_DATE(?) AND b.check_indate < TO_DATE(?)) OR (b.check_outdate > TO_DATE(?) AND b.check_outdate < TO_DATE(?)) ) ) AND r.room_type LIKE ?
+
roommanage
랑bookmanage
를JOIN
해서 쿼리하는게 더 간결할 거 같긴 한데 더 들여다보기 어려워서 쿼리 정리까지만 했습니다.
댓글 입력