본문 바로가기
JSP

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

by code2772 2023. 9. 30.

[ 목차 ]

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

    반응형