MySQL로 구현한 게시판, ORACLE과 연동하기(쿼리 변경하기)

Jang Seok Woo·2020년 9월 1일
0

웹개발

목록 보기
5/31
post-custom-banner

MySQL로 구현한 게시판, ORACLE과 연동하여 쿼리 변경하기

지난 주 Eclipse와 MySQL을 연동해 게시판을 구현하였다. 유저 로그인, 회원가입, 게시판 글쓰기, 수정,삭제 기능이 있다.

이 게시판을 Oracle을 이용하여 연동하여 보자!

1. User 로그인, 회원가입

먼저 테이블 생성

CREATE TABLE USER_BBS(
userID VARCHAR(20) primary key,
userPassword VARCHAR(20),
userName VARCHAR(20),
userGender VARCHAR(20),
userEmail VARCHAR(50)
);

오라클에서 테이블 명으로 USER는 불가능하다. USER_BBS로 선언해서 만들어주자

정상적으로 데이터 삽입 삭제 수정이 되는지 확인하자

insert into user_bbs
values(‘jsw’,’jsw’,’jsw’,’MAN’,jsw4215@jsw4215.com’);
delete from bbs where userid=’jsw’;

이제 Eclipse로 들어가 userDAO를 수정하자

유저 로그인 및 회원가입이 되는지 확인하면 끝

2. 게시판 글 쓰기, 수정, 삭제 구현

여기서 쓰기만 잘 해내면 수정 삭제는 쉽다.

기존의 쿼리이다. Oracle은 맨 뒤의 ; (세미콜론)을 제거하고 prepared statement 를 사용해야한다.

SELECT * FROM bbs WHERE bbsID < ? AND bbsAvailable =1 ORDER BY bbsID DESC LIMIT 10;

여기서 Limit가 Oracle에는 없는 기능이기 때문에 다른 방식으로 10개를 뽑아내야 한다.

Limit가 없으면 어떻게 정렬시킨 10개의 데이터를 뽑아낼 수 있을까?

bbsID >10 and bbbsID <=20; 

이런 형식의 쿼리는 Oracle에서는 먹히지 않는다.
Oracle은 0부터 데이터를 읽어야 한다.

우선 서브쿼리라고 해서 쿼리(서브쿼리) 이런식으로 쿼리를 2중으로 만들어 정렬된 쿼리에 순번을 매긴 후, 해당 순번에서 between A and B를 이용해 중간의 데이터를 10개 가져오는 쿼리를 만들어 보겠다.

한 단계씩 알아보자

조회된 순서대로 순번을 매긴다.

Select rownum , a.* from bbs a;

Order by를 이용해 정렬된 쿼리에 rownum을 이용해 순번을 매긴다.

Select rownum , x.* from(select a.* from bbs a order by a.bbsID) x;

Row_number() 함수를 이용해 order by로 정렬된 데이터에 rownum로 순번을 매긴다.

Select row_number() over(order by a.job, a.ename) row_num , a* from emp a order by a.job, a.ename;

++) Partition별로 순번을 부여할 수도 있다.

Select Row_number() over(partition by a.job order by a.job, a.ename) row_num , a.* from emp a order by a.job, a.ename;

이제 생각해보면

메인쿼리

Select * from (select row_number() over( order by bbsDate desc) NUM , a* from bbs a order by bbsDate) where NUM between 10 and 20;

Select * from () where NUM between 10 and 20; 쿼리에 서브쿼리로 bbsDATE순으로 정렬된 데이터가 있어야 한다.

서브쿼리

desc로 배열하는 이유는 새로 작성한 게시판 글일수록 bbsDate를 높을 숫자를 부여받기 때문이다.

select row_number() over( order by bbsDate desc) NUM , a* from bbs a;

이 부분에서 bbsDate를 desc로 정렬한 NUM(row_number)을 붙인 데이터들을 from bbs로부터 불러올 것인데, 우리는 조건을 하나 생각해야한다.

삭제시에 bbsAvailable 변수를 0으로 세팅할 것이다. 그러므로 from bbs a where bbsAvailable = 1;
조건을 붙여 다음과 같이 쿼리를 완성한다.

"select * from ( select row_number() over (order by bbsDate desc) NUM, A.* from bbs A where bbsavailable=1 order by bbsDate desc) where NUM between ? and ?";

마지막으로 하나 더, NUM이라는 변수가 추가로 출력되니 다음과 같이 preparedStatement를 출력시에 2 부터 출력하도록 한다.(1은 NUM이다.)

수정과 삭제는 그대로 이용하면 된다. 끝

profile
https://github.com/jsw4215
post-custom-banner

0개의 댓글