기존 테이블과 내용은 하단 참조
2023.09.26 - [DB] - pk 2개, 여러개 설정 - SQLGate
삽입구문
if(sCatId.equals("")) {
query.append("INSERT INTO TBL_CALLSPAM (CALLBACK, CPID, REASON) VALUES (?, ? ,?)");
vecArgs.add(spamnumber);
vecArgs.add(snLoginID);
vecArgs.add(reason);
}else {
query.append("INSERT INTO TBL_CALLSPAM (CATCODE, CALLBACK, CPID, REASON) VALUES (?, ?, ?, ?)");
vecArgs.add(sCatId);
vecArgs.add(spamnumber);
vecArgs.add(snLoginID);
vecArgs.add(reason);
}
이전 스팸번호를 카테고리별 또는 아무것도 입력하지 않으면 누구든 관리하고 볼 수 있는 전체 스팸번호를 분류하기 위해서 if ~ else 문을 사용하였다. 내가 직접 입력할 수 있는 부분은 spamnumber, reason, sCatId 이다.
삭제구문
query.append("UPDATE TBL_CALLSPAM SET FLAG ='D', EDITDATE = SYSDATE WHERE HISTORY_ID = ? ");
테이블을 직접 삭제하지 않고 FLAG 값과 EDIDATE 를 수정하여 게이트웨이에서 파일을 읽고 삭제할 수 있도록 한다.
출력구문
query.append("SELECT SUBTCRN.CALLBACK, CATCODE, REGDATE, REASON,HISTORY_ID FROM \n");
query.append("(SELECT DISTINCT TCRN.CALLBACK,
CATCODE, REGDATE,REASON, HISTORY_ID,
ROW_NUMBER () OVER (ORDER BY HISTORY_ID) RN FROM TBL_CALLSPAM TCRN
WHERE (CPID = '"+snLoginID+"' OR CATCODE =' ' )\n");
if(!callNumType.equals("")) {
if(callNumType.equals("all")) {
query.append("AND CATCODE = ' ' \n");
}else if(callNumType.equals("manual")) {
query.append("AND CATCODE != ' ' \n");
}else {
}
}
query.append("AND (FLAG = 'A' OR FLAG = 'F') \n");
if(!searchNum.equals("")){
query.append("AND CALLBACK LIKE '%' || "+searchNum+" || '%' \n");
// vecArgs.add("%" + searchNum + "%");
}
query.append(" ) SUBTCRN \n");
query.append("WHERE RN > '"+start+"' AND RN <= '"+end+"' \n");
query.append("ORDER BY SUBTCRN.CALLBACK \n");
(SELECT DISTINCT TCRN.CALLBACK, CATCODE, REGDATE, REASON, HISTORY_ID, ROW_NUMBER () OVER (ORDER BY HISTORY_ID) RN FROM TBL_CALLSPAM TCRN WHERE (CPID = '"+snLoginID+"' OR CATCODE =' ')): 서브쿼리를 사용하여 TBL_CALLSPAM 테이블에서 데이터를 검색한다.
CPID가 snLoginID와 일치하거나 CATCODE가 비어 있는 경우에 해당하는 데이터를 가져온다. 이 서브쿼리는 데이터를 DISTINCT하게 선택하고 HISTORY_ID에 따라 오름차순으로 정렬한 뒤 각 행에 RN 열을 부여하였다.
수정구문
if(sCatId.equals("")) {
query.append("UPDATE TBL_CALLSPAM SET FLAG ='F' ,EDITDATE = sysdate,
REASON = ? WHERE CPID= ? AND CALLBACK =?
AND FLAG='E' AND CATCODE = ' ' \n");
vecArgs.add(reason);
vecArgs.add(snLoginID);
vecArgs.add(spamnumber);
}
else {
query.append("UPDATE TBL_CALLSPAM SET FLAG ='F' ,EDITDATE = sysdate,
REASON = ? WHERE CPID= ? AND CALLBACK =? AND FLAG='E'
AND CATCODE= ? \n");
vecArgs.add(reason);
vecArgs.add(snLoginID);
vecArgs.add(spamnumber);
vecArgs.add(sCatId);
}
삭제된 FLAG 값은 D로 변경이 되고 파일에 작성이 완료되면 FLAG 값이 E로 변경된다. 표출해주는 부분이 FLAG ,A ,F 인 경우에만 보여주기 때문에 디비에는 내용이 남아있지만 입력된 값을 사용자는 보지 못하고 입력해도 오류가 발생한다. 그런 내용은 process 단에 구현되어 있다.
카운트 횟수 구문
query.append("SELECT COUNT(CALLBACK) TOTCOUNT \n");
query.append("FROM TBL_CALLSPAM \n");
query.append("WHERE CPID = ? \n");
if(!callNumType.equals("")) {
if(callNumType.equals("all")) {
query.append("AND CATCODE = ' ' \n");
}else if(callNumType.equals("manual")) {
query.append("AND CATCODE != ' ' \n");
}
}
query.append("AND FLAG = 'F' OR FLAG ='A' \n");
vecArgs.add(snLoginID);
if(!searchNum.equals("")){
query.append("AND CALLBACK LIKE ? \n");
vecArgs.add("%" + searchNum + "%");
}
SELECT COUNT(CALLBACK) TOTCOUNT: CALLBACK 열의 개수를 세는 것을 시작합니다. 이를 통해 조건을 만족하는 행의 수를 얻을 것이다.
FROM TBL_CALLSPAM: TBL_CALLSPAM 테이블에서 데이터를 가져오고.
WHERE CPID = ?: CPID 열이 지정된 snLoginID 값과 일치하는 행만 필터링한다.
if(!callNumType.equals("")) { ... }: callNumType이 비어 있지 않은 경우에만 실행되는 조건이다. callNumType에 따라 다른 필터를 추가한다.
if(callNumType.equals("all")) { ... }: callNumType이 "all"인 경우에 실행되는 조건이다. 이 경우 CATCODE가 비어 있는 데이터만 선택하고 반대로 manual인 경우에는 CATCODE가 비어있지 않은것을 가저오고 후에 FLAG 가 A , F 인 경우 쿼리를 가져온다. 마지막으로 LIKE 를 사용하여 입력한 글을 찾고 카테고리별 카운트를 확인한다.
'JSP' 카테고리의 다른 글
크롤링 (네이버 영화 리뷰 및 DB저장) (0) | 2022.12.04 |
---|---|
JSP (Marven, 파일 업로드, JSTL, el) (0) | 2022.11.29 |
JSP DB 회원가입 게시판 쿼리 (0) | 2022.11.26 |
JSP DB연결 (로그인 및 회원 가입) - MySQL 연결 활용 (0) | 2022.11.21 |
JSP (예외, pagecontext, ajax, XMLHttpRequest) (0) | 2022.11.21 |