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 ?
    

    + roommanagebookmanageJOIN해서 쿼리하는게 더 간결할 거 같긴 한데 더 들여다보기 어려워서 쿼리 정리까지만 했습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)