휴일 삭제하기
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;
}
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
반응형
'프로그래밍 언어 > Java' 카테고리의 다른 글
[ Java ] DAO, Service 활용한 휴일 등록하기 (15) | 2023.12.13 |
---|---|
[ Java ] DAO, VO, Service 활용한 리스트 불러오기 (58) | 2023.12.07 |
[ Java ] Long과 long의 차이점 (60) | 2023.11.29 |
[ Java ] What is the Wrapper Class? (20) | 2023.11.29 |