jsp, MySql 게시판 select 쿼리 질문

조회수 846회

jsp와 mysql을 가지고 글 전체 목록을 조회하는 부분을 짜고있습니다

오라클로 이미 한 번 짰던 코드를 mysql로만 바꾸면 되는 간단한 작업인줄 알았는데 조금 다른 부분이 있어서 어려움을 겪고 있습니다

public ArrayList<BoardDto> getBoardList(HashMap<String, Object> listOpt) {
        ArrayList<BoardDto> list = new ArrayList<BoardDto>();

        String opt = (String)listOpt.get("opt");
        int start = (Integer)listOpt.get("start");

        try {
            conn = ConnUtil.getConnection();
            StringBuffer sql = new StringBuffer();

            if(opt == null) {
                sql.append("select * from");
                sql.append(" (select rownum as rnum, date.* from");
                sql.append(" (select board_num, board_id, board_subject,");
                sql.append(" board_content, board_file, board_count,");
                sql.append(" board_re_ref, board_parent, board_date");
                sql.append(" from board a");
                sql.append(" date)");
                sql.append(" where rnum >= ? and rnum <= ?");

                System.out.println(sql);

                pstmt = conn.prepareStatement(sql.toString());
                pstmt.setInt(1, start);
                pstmt.setInt(2, start+9);

                sql.delete(0, sql.toString().length());
            } 
 ...

저대로 코드를 돌리니

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'date) where rnum >= 1 and rnum <= 10' at line 1

sql 구문 에러가 뜨더라구요...

sql문을 출력하면

select * from (select rownum as rnum, date.* from (select board_num, board_id, board_subject, board_content, board_file, board_count, board_re_ref, board_parent, board_date from board a date) where rnum >= ? and rnum <= ?

이렇습니다

from board 뒤에 a는 alias를 추가해줘야한대서 넣었는데 저렇게 하는게 맞나요?

where문에서 오류가 난걸까요?

MySql 너무 어렵습니다 ㅠ

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 에러 자체는 from board a 부분이 문법이 잘못되어서인데요. 이참에 쿼리를 전체적으로 보자면... rnum이 왜 도입됐는지 모르겠네요. 아마도 페이징 때문인 것 같은데요, 실제 조회하는 테이블은 board 1개뿐인 거 같고 말이지요.

    이참에 limit offset을 사용해 보시죠. 아래 코드가 작동하는지 시도해 보시겠어요?

    sql.append("SELECT * FROM board ORDERS LIMIT ? OFFSET ?");
    
    pstmt.setInt(1, 10);
    pstmt.setInt(2, start); // 단, 항상 start % 10 == 0
    
    • 감사합니다! 작동은 하는데 제목이 안 떠서 좀 더 limit offset 구문을 알아봐야할것 같네요! 그래도 오류가 안 뜨고 쿼리문이 작동한다는 것이 너무 감격스럽습니다 ㅠㅠ 알 수 없는 사용자 2020.5.4 20:00
    • ㅋㅋ제목은 제가 jsp 파일에 안 넣어서 그랬던거군요... 진짜 저의 부주의에 감탄스럽습니다...ㅠㅠㅋㅋㅋ 알 수 없는 사용자 2020.5.4 20:09

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

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

(ಠ_ಠ)
(ಠ‿ಠ)