JSP

JSP 스팸번호 입력, 출력, 수정, 횟수, 삭제, 검색 쿼리

code2772 2023. 9. 30. 14:05
728x90
반응형

기존 테이블과 내용은 하단 참조

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 를 사용하여 입력한 글을 찾고 카테고리별 카운트를 확인한다. 

반응형