본문 바로가기
CLASS/SPRING,JSTL

#3-2 / coupon delete,update (spring + database)

by hingu 2024. 7. 10.

https://dev-eunse.tistory.com/198 여기 list에서 삭제,수정

 

 

👀 삭제

 1. shop_main.java 에 추가 : @GetMapping("/coupon_del.do")

/*-- 쿠폰 delete --*/
@GetMapping("/coupon_del.do")
public void coupon_del(int cidx, HttpServletResponse res) throws Exception{
    res.setContentType("text/html;charset=utf-8");

    String callback = new coupon_insert().del_result(dbInfo, cidx);
    this.pw= res.getWriter();
    if(callback == "Y") {
        this.pw.write("<script>"
                + "alert('정상적으로 쿠폰이 삭제되었습니다.');"
                + "location.href='./coupon_list.do';"
                + "</script>");
    }else {
        this.pw.write("<script>"
                + "alert('데이터 오류로 인하여 삭제 실패');"
                + "location.href='./coupon_list.do';"
                + "</script>");
    }

    this.pw.close();
}

삭제 : view페이지 필요없음 => void 사용

 

 2. coupon_insert.java 에 삭제기능 메소드 추가 ( database 실행만 하는 메소드 : shop_main에서 실행됨 )

Connection con = null;
PreparedStatement ps = null; 
String rs = null; //결과값을 담을 전역 변수


/*-- 삭제기능 추가 - 실행하고 , 성공여부 결과값 this.rs로 출력 --*/
public String del_result(BasicDataSource dbinfo, int cidx) throws Exception{
    //dao는 필요없음 - 고유값이 정해져서 날라오니까
    try {
        this.con = dbinfo.getConnection();
        String sql = "delete from coupon where cidx=?";

        this.ps = this.con.prepareStatement(sql);
        this.ps.setInt(1, cidx);
        this.ps.executeUpdate();
        this.rs = "Y";

    }catch(Exception e) {
        System.out.println("db 쿼리문 오류 발생!");
        this.rs = "N";
    }finally {
        //여기에 try~catch 넣어주기 싫으면 위에 throws Exception 적어주면댐
        this.ps.close();
        this.con.close();
    }

    return this.rs;
}

 

❓ 선택삭제 버튼을 만들고 싶다면?  (del_result 공통 사용 - 수정없음)

@PostMapping("/choice_del.do")
public void choice_del(String cp_ck[] , HttpServletResponse res) throws Exception{
    res.setContentType("text/html;charset=utf-8");

    int f;
    String callback = "";
    for(f=0; f<cp_ck.length; f++) {
        callback = new coupon_insert().del_result(dbInfo,  Integer.parseInt(cp_ck[f]));
    }

    this.pw= res.getWriter();
    if(callback == "Y") {
        this.pw.write("<script>"
                + "alert('정상적으로 쿠폰이 삭제되었습니다.');"
                + "location.href='./coupon_list.do';"
                + "</script>");
    }else {
        this.pw.write("<script>"
                + "alert('데이터 오류로 인하여 삭제 실패');"
                + "location.href='./coupon_list.do';"
                + "</script>");
    }

    this.pw.close();
}

 

👀 수정

 

select (shop_main.java과 연결된 coupon_update.java에서 getter,setter로 배열에 담음,shop_main.java에서 jsp로 보냄)

-> jsp로 수정할 해당 data 배열로 출력

-> 수정 버튼 클릭 ( coupon_modifyok.do  로 보냄)

-> data update

 

방법 1. data 1개 값을 dao로 setter값에 모두 적용 후 Controller에서 해당 배열을 Model->View 적용

- 요거로 해봄 더어려움 ㅠ 

 

방법 2. 해당 module에서 1차 배열을 미리 만든 후 control로 return 후 Model -> View 적용

 

 

 1. shop_main.java 에 추가 : @GetMapping("/coupon_modify.do")

     coupon_modify.jsp 페이지로 해당 data를 출력 (select)

//쿠폰정보 수정 : 한개의 데이터만 로드되도록 하는 메소드
@GetMapping("/coupon_modify.do")
public String coupon_modify(int cidx, coupon_dao dao,Model m) {
    coupon_update cu = new coupon_update();

    //여기서 throws Exception 해줘서 여기서도 예외처리 해줘야함
    try {
        //db정보, dao, db고유값을 해당 메소드로 전달 : setter 쓰려구 
        cu.select_one(dbInfo, dao , cidx);
        m.addAttribute("info",dao.lists()); 
        //최종값은 배열로 getter값을 모두 제작 후 view(jsp) 로 이관 
        //dao.lists() : coupon_dao 에서 getter로 배열 출력

    }catch(Exception e) {

    }

    return null;
}

수정 : view페이지 필요함 => String - return 사용

=> 여기서 Model 이용해서 jsp로 배열을 던짐

 

 2. coupon_update.java 생성 : shop_main.java에서 호출

package shop;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import org.apache.commons.dbcp.BasicDataSource;

public class coupon_update {
	Connection con = null;
	PreparedStatement ps = null;
	ResultSet rs = null;
	
	// new 를 사용하지 않는 이상 dao는 Module과 Controller 모두 동일한 값을 공유할 수 있음
	public void select_one(BasicDataSource dbinfo , coupon_dao dao , int cidx) throws Exception{
		try {
			String sql = "select * from coupon where cidx=?";
			
			this.con = dbinfo.getConnection();
			this.ps = this.con.prepareStatement(sql);
			this.ps.setInt(1, cidx);
			this.rs = this.ps.executeQuery();
			this.rs.next();
			
			//database에 하나의 row값을 dao에 setter 메소드에 값을 이관시킴
			dao.setCidx(Integer.parseInt(this.rs.getString(1)));
			dao.setCpname(this.rs.getString(2));
			dao.setCprate(Integer.parseInt(this.rs.getString(3)));
			dao.setCpuse(this.rs.getString(4));
			dao.setCpdate(this.rs.getString(5));
			dao.setIndate(this.rs.getString(6));
			
		}catch(Exception e) {
			System.out.println("error");
		}finally {
			this.rs.close();
			this.ps.close();
			this.con.close(); //얜 안해두댐
		}
	}
	
}

 

 

 3. coupon_modify.jsp :  이게 coupon_modify.do로 보여짐!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="cp" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠폰 수정 프로세서</title>
</head>
<body>
	<form id="frm">
		<input type="hidden" name="cidx" value="${info.get(0)}">
		쿠폰명 : <input type="text" name="cpname" value="${info.get(1)}"><br>
		쿠폰할인율 : <input type="text" name="cprate" value="${info.get(2)}"><br>
		쿠폰활성화 : <input type="radio" name="cpuse" value="Y">사용함
		<input type="radio" name="cpuse" value="N">사용안함<br>
		쿠폰만료일 : <input type="date" name="cpdate" value="${info.get(4)}"><br>
		쿠폰 생성일 : <input type="text" name="indate" value="${info.get(5)}" readonly><br><br>
		<input type="button" value="쿠폰수정" onclick="cpmodify()">
	</form>
</body>

<script type="text/javascript">
	//checkbox는 js로 핸들링 - jstl로도 할수있음
	var checkin = "${info.get(3)}";
	var cpuse = document.getElementsByName("cpuse");

	if(checkin == "Y"){
		cpuse[0].checked=true;		
	}else{
		cpuse[1].checked=true;
	}

	function cpmodify(){
		frm.method = "POST";
		frm.action = "./coupon_modifyok.do";
		frm.submit();
	}
</script>

</html>

 

 4. 수정버튼 눌렀을때 실행되는 부분(update) :  shop_main.java 에 추가

@RequestMapping(value="/coupon_modifyok.do",method=RequestMethod.POST)

@RequestMapping(value="/coupon_modifyok.do",method=RequestMethod.POST)
public void coupon_modifyok(coupon_dao dao,HttpServletResponse res) {
    res.setContentType("text/html;charset=utf-8");

    ArrayList<String> arr = new ArrayList<String>();
    arr.add(String.valueOf(dao.getCidx()));
    arr.add(dao.getCpname());
    arr.add(String.valueOf(dao.getCprate()));
    arr.add(dao.getCpuse());
    arr.add(dao.getCpdate());

    try {
        this.pw= res.getWriter();
        coupon_update cu = new coupon_update();
        String callback = cu.cp_modify(dbInfo, arr);

        if(callback == "Y") {
            this.pw.write("<script>"
                    + "alert('정상적으로 쿠폰이 수정되었습니다.');"
                    + "location.href='./coupon_list.do';"
                    + "</script>");
        }else {
            this.pw.write("<script>"
                    + "alert('데이터 오류로 인하여 수정 실패');"
                    + "location.href='./coupon_list.do';"
                    + "</script>");
        }
        this.pw.close();

    }catch(Exception e) {

    }

}

 


 5.
shop_main.java 에서 호출하는 메소드 : coupon_update.java에 추가

     : 쿼리 실행 및 결과값 출력

public String cp_modify(BasicDataSource dbinfo, ArrayList<String> arr) throws Exception{
    String result="";
    try {
        String sql = "update coupon set cpname=?,cprate=?,cpuse=?,cpdate=? where cidx=?";
        this.con = dbinfo.getConnection();
        this.ps = this.con.prepareStatement(sql);
        this.ps.setString(1, arr.get(1));
        this.ps.setString(2, arr.get(2));
        this.ps.setString(3, arr.get(3));
        this.ps.setString(4, arr.get(4));
        this.ps.setInt(5, Integer.parseInt(arr.get(0)));
        this.ps.executeUpdate();

        result="Y";

        this.ps.close();
        this.con.close();
    }catch(Exception e) {
        result="N";

        System.out.println("database 오류");
    }

    return result;
}