본문 바로가기

안녕하세요!

프로그래밍 언어/Java

[ Java ] Dao, Service 활용한 휴일 삭제하기


 

휴일 삭제하기


 

HolidayDAO.java


 

private String HOLIDAY_DELETE =
		"DELETE FROM SQL_HOLIDAY_LIST WHERE YEAR=? AND MONTH=? AND DAY=?";

 

public int DELETEHoliday(Connection conn, String year, String month, String day) throws SQLException {
    int resultVal = 0;
    preparedStatement pstmt = conn.prepareStatement(HOLIDAY_DELETE);
    pstmt.setString(1,year);
    pstmt.setString(2,month);
    pstmt.setString(3,day);
    resultVal = pstmt.executeUpdate();
    pstmt.close();
    return resultVal;
}

 

 

 

[ Java ] DAO, Service 활용한 휴일 등록하기

휴일 등록하기 HolidayDAO.java private String HOLIDAY_INSERT = "INSERT INTO SQL_HOLIDAY_LIST (YEAR, MONTH, DAY, REMARK) VALUES(?, ?, ?, ?)"; public int insertHoliday(Connection conn, String year, String month, String day, String remark) throws SQLExce

pythonchoboman.tistory.com


 

PreparedStatement


 

PreapredStatement를 사용해 쿼리를 실행시킬 수 있도록 한다.

HOLIDAY_DELETE 쿼리문을 연결시켜준다.

?의 개수에 따라 삽입되는 데이터의 개수도 정해진다.

삭제하고자 하는 칼럼의 데이터 값을 순서대로 번호를 매겨주면 차례대로 매칭된다.

 

setString()


 

setString()은 preparedStatement가 제공하는 메서드이며,

물음표에 매칭시킬 값들을 불러오는 역할을 한다.

preparedStatement.setString(1, year)의 의미는

첫번째 물음표에 year라는 데이터 값을 매칭시킨다는 것이다.

총 3개의 값을 삭제할 것이며, 그 값은 각각 year, month, day 이다.

 

여기서 remark를 굳이 넣지 않은 이유는

년도, 월, 일만 매칭시켜 해당 테이블의 튜플을 삭제할 수 있기 때문이다.

다만 데이터 무결성을 지키기 위해서는 기본키를 설정해야 하나,

현재는 기본키 없이 데이터를 삭제하는 과정을 학습하고 있으니 참고 바란다.

 

HolidayService.java


 

public class HolidayService {

    WriteLog log = WriteLog.getInstance();

    Connection      conn    = null;
    SqlConnection   sq      = null;
    HolidayDAO      hdDao   = null;

    public HolidayService() {
        hdDao = new HolidayDAO();
    }

    public List deleteHoliday(String year, String month, String day) {

        SqlConnection sq = new SqlConnection();
        String returnStr = "";
        int resultVal = 0;
        sq = new SqlConnection();
    
        try {
            sq.createConnection(Common.DB);
            conn = sq.getConnection();
            conn.setAutoCommit(false);
    
            // DAO 호출
            resultList = hdDao.deleteHoliday(conn, year, month, day);
            
            if(resultVal<0) {
            	returnStr = "Fail";
            }
            else {
            	returnStr = "Successs";
            }
            conn.commit();
        } catch (SQLException e) {
            e.printStackTrace();
            returnStr= "SqlErr";
            try {
                log.log("sql_Err", "HolidayList", e.toString());
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }
        finally {
            try {
                if(!conn.isClosed()) {
                    conn.close();
                }
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            sq.closeConnection();
        }
        return returnStr;
    }
}

 

SqlConnection


 

SqlConnection

SQL 서버에 접속학 위한 클래스이다.

sq = createConnection(Common.DB)

createConnection() 메서드를 사용하면 DB와 서버를 연결하는 객체를 만들 수 있고,

각종 쿼리를 실행시킬 수 있게 된다.

createConnection() 메서드에는 인자로 DB에 대한 정보를 넣어주면 된다.

반응형

HolidayDelete.java


 

if("delete".equals(opcode)) {
	String[] selectList = (request.getServletRequest().getParameterValue("listNum"));
	int listSize = selectList.length;
	int failCount = 0;
	String failStr= ""
	if(listSize>0) {
		ArrayList resultArr = new ArrayList();

		for(int i=0; i<selectList.length; i++) {
			String[] values = selectList[i].split(;);
			year 	= values[0];
			month 	= values[1];
			day 	= values[2];

			resultArr.add(service.deleteHoliday(year, month, day));
		}
		for(int i=0; i<listSize; i++) {
			if(!"Success".equals(resultArr.get(i))) {
				if("".equals(failStr)) {
					failStr += selectList[i];
				}
				else {
					failStr += "/" + selectList[i];
				}
				failCount++;
			}
		}
		if(failCount==0) {
			response.write("<script>alert('총 "+listSize+"개 휴일이 삭제되었습니다.');</script>");
		}
		else {
			response.write("<script>alert('총 "+listSize+"개 중"+failCount+"개 실패(등록번호:"+.failStr").');</script>");
		}
	}
}

 

opcode


 

opcode 매개변수를 통해

delete라는 문자에 해당하는지 확인한ㄴ다.

 

getParameterValues("listNum")


 

HTTP 요청에서 lisNum 매개변수의 값을 배열로 받아온다.

이는 삭제할 휴일의 목록이다.

 

split(;)


 

split() 메서드는 문자열을 나눠주는 함수이다.

for문 내에서 values라는 문자열을 새롭게 만들고,

selectList[]가 가져온 휴일 리스트의 값인 year, month, day를 세미콜론으로 분리시켜 준다.

배열함수에 각각 순서대로 값을 넣어준 뒤,

holidayService에 있는 deleteHoliday를 불러와 휴일을 삭제한다.

삭제 결과는 resultArr에 저장된다.

 

holiday_delete.jsp


 

function deleteHoliday() {
	var listNumArr 	 = new Array();
	var selectedFlag = ""
	listNumArr = document.getElementByName("listNum");
	for(var i=0; i<listNumArr.length; i++){
		if(listNumArr[i].checked) {
			selectedFlag = "selected";
			break;
		}
	}
	if(selectedFlag=="") {
		alert("삭제할 항목을 선택해 주세요.");
	}
	else {
		if(confirm("삭제하시겠습니까?")) {
			var frm 			= document.frm;
			frm.opcode.value 	= "delete";
			frm.action 			= "kr.co.holidaymgt.HolidayList";
			frm.method 			= "post";
			frm.submit();
		}
	}
}

 

Array()


 

Array() 함수로 listNumArr을 새로운 배열함수로 지정해 준다.

selectedFlag체크된 항목이 있는지 여부를 나타낸다.

document에 있는 getElementByName() 메서드를 사용해

name이 listNum인 모든 요소를 가져와서 반복문을 통해 체크된 항목이 있는지 확인한다.

체크된 항목이 있으면 selectedFlag를 selected로 설정하고 반복문을 종료한다.

728x90

 

728x90
반응형

loading