1.coupon 프로세서
- 쿠폰 생성 시 고려할 점
1. 쿠폰 종류 -%, 원
2. 쿠폰 사용 제한 금액
3. 쿠폰 제한 카테고리
4. 쿠폰 범위 제한 일자
5. 장바구니 적용범위
etc..
- 쿠폰 프로세서에 필요한 기능
- 쿠폰 생성페이지
- 쿠폰 리스트 페이지
2. coupon 프로세서 생성
2-1. DB 생성
1. table 생성
2-2. 쿠폰 생성
1. View
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>쿠폰 생성 프로세서</title> </head> <body> <form id="frm" method="post" action="./coupon_writeok.do"> 쿠폰 명 :<input type="text" name="cpname"><br> 쿠폰 할인율 : <input type="text" name="cprate" value="30"><br> 쿠폰 활성화 : <input type="radio" name="cpuse" value="Y" checked>사용함 <input type="radio" name="cpuse" value="N">사용안함<br> 쿠폰 만료일 : <input type="date" name="cpdate"><br> <input type="button" value="쿠폰 생성" onclick="cpwrite()"> </form> </body> <script> function cpwrite() { frm.submit(); } </script> </html>
2. Controller
① 데이터 소스, dao 를 module(coupon_insert()로 넘김) 에 넘김
-> DB정보 및 setter 값을 받아서 insert 실행
@Controller public class shop_main { @Autowired BasicDataSource datasource; //얘도 클래스 PrintWriter pw = null; @RequestMapping(value="/coupon_writeok.do",method=RequestMethod.POST) //void : view 페이지 안쓰겠다는 것 ->Httpservletresponse 써야 printwrite 찍을 수 있음 public void coupon_writeok(@ModelAttribute("coupon") coupon_dao dao, HttpServletResponse res) throws Exception{ res.setContentType("text/html;charset=utf-8"); //데이터 소스 전체를 넘김 //Module 에서 데이터를 insert 시키며 결과값을 return 받아서 처리 coupon_insert ci = new coupon_insert(); //데이터 베이스 정보, dao 정보를 인자값으로 이관 String callback = ci.result(datasource,dao); //어차피 coupon_insert()부터 실행돼서 받아오기떄문에 null로던져도 됨 this.pw = res.getWriter(); //결과 값에 맞는 조건식 if(callback=="Y") { //equals 쓰면 오류남 this.pw.write("<script>" + "alert('정상적으로 쿠폰이 등록 되었습니다.');" + "location.href='./coupon_list.do';" + "</script>"); }else { this.pw.write("<script>" + "alert('데이터 오류로 인하여 쿠폰이 등록되지 않았습니다.');" + "history.go(-1);" + "</script>"); } } }
3. Module
3-1. DAO 제작
-> 컬럼명과 동일하게 변수 제작
@Getter @Setter public class coupon_dao { int cidx, cprate; String cpname, cpuse, cpdate, indate; }
3-2. 쿠폰 insert 파트
public class coupon_insert { Connection con = null; PreparedStatement ps = null; String rs = ""; //결과 값을 리턴하는 변수 //DB정보 및 setter 값을 받아서 insert 실행 public String result (BasicDataSource datasource,coupon_dao dao) { try { this.con = datasource.getConnection(); String sql = "insert into coupon values('0',?,?,?,?,now())"; this.ps = this.con.prepareStatement(sql); this.ps.setString(1, dao.getCpname()); this.ps.setInt(2, dao.getCprate()); this.ps.setString(3, dao.getCpuse()); this.ps.setString(4, dao.getCpdate()); this.ps.executeUpdate(); this.rs ="Y"; //승인 확정 this.ps.close(); this.con.close(); } catch (Exception e) { this.rs = "N"; //오류 발생 } return rs; //결과 값을 리턴 } }
2-3. 쿠폰 리스트 출력
1. View
<%@ 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> <p>쿠폰 등록 총 데이터 : ${ctn}EA</p> <table border="1" cellpading="0" cellspacing="0"> <thead> <tr> <th>번호</th> <th>쿠폰명</th> <th>할인율</th> <th>사용 유/무</th> <th>수정/삭제</th> </tr> </thead> <tbody> <!-- varStatus = status : forEach 에 대한 정보값을 설정하는 코드 - .index : 노드번호 0부터 시작 - .count : 1부터 시작하는 번호 - .last : 맨 마지막 번호값 (true : 마지막 데이터일경우 / false : 다음 데이터가 있는 상황) (속성값이 필요함) - .begin : 시작번호 - .end : 종료 번호 - .step : 증가값 --> <form id="frm" method="post" action="./coupon_del_list.do"> <input type="hidden" name="arr"> <cp:forEach var="cpdata" items="${all_list}" varStatus="status"> <tr> <td><!--${ctn - status.index}--> <input type="checkbox" id="del_list" name="del_list" value="${cpdata.get(0)}"> </td> <td>${cpdata.get(1)}</td> <td>${cpdata.get(2)}</td> <td>${cpdata.get(3)}</td> <td> <input type="button" value="수정" onclick="coupon_modify('${cpdata.get(0)}')"> <input type="button" value="삭제" onclick="coupon_del('${cpdata.get(0)}')"> </td> </tr> </cp:forEach> </form> </tbody> </table> <input type="button" value="선택 삭제" onclick="choice_del()"> </body> <script> function choice_del() { const arr = []; const no = document.getElementsByName("del_list"); for (let i = 0; i < del_list.length; i++) { // 속성중에 체크 된 항목이 있을 경우 if (del_list[i].checked == true) { arr.push(del_list[i].value); } } document.getElementsByName("arr")[0].value=arr; frm.submit(); } function coupon_del(no) { if(confirm("해당 쿠폰 삭제시 복구 되지 않습니다.")) location.href='./coupon_del.do?cidx='+no; } function coupon_modify(no) { location.href='./coupon_modify.do?cidx='+no; } </script> </html>
2. Controller
@Controller public class shop_main { @Autowired BasicDataSource datasource; //얘도 클래스 PrintWriter pw = null; Connection con = null; //원래는 모듈에 들어가야함 PreparedStatement ps = null; ResultSet rs = null; //쿠폰 리스트 (M:dao, C:coupon_list V:jsp) @GetMapping("/coupon_list.do") public String coupon_list(Model m) throws Exception{ try { this.con = datasource.getConnection(); String sql = "select cidx,cpname,cprate,cpuse from coupon order by cidx desc"; this.ps = this.con.prepareStatement(sql); this.rs = this.ps.executeQuery(); //1차배열 및 setter, getter coupon_dao cd = new coupon_dao(); //2차배열 ArrayList<ArrayList<Object>> all = new ArrayList<ArrayList<Object>>(); int ctn = 0; while(this.rs.next()) { ctn = this.rs.getRow();//auto_increment와는 다른 객체 //0번이 아니라 1번부터 시작해야함 cd.setCidx(Integer.parseInt(this.rs.getString(1))); cd.setCpname(this.rs.getString(2)); cd.setCprate(Integer.parseInt(this.rs.getString(3))); cd.setCpuse(this.rs.getString(4)); all.add(cd.lists()); }; // VIEW 로 보냄(JSTL 로 해당 데이터를 이관) //데이터 총 갯수 m.addAttribute("ctn",ctn); //데이터 리스트 배열 m.addAttribute("all_list",all); } catch (Exception e) { System.out.println("DB연결오류발생"); }finally { this.rs.close(); this.ps.close(); this.con.close(); } return null; }
3. Module
-> select 에 사용할 1차 클래스 배열 생성
-> Collections.singletonList( null ) 을 통해 null 값 까지 출력되는 것을 막음
@Getter @Setter public class coupon_dao { int cidx, cprate; String cpname, cpuse, cpdate, indate; //select에 사용할 1차 클래스 배열 public ArrayList<Object> lists(){ ArrayList<Object> al = new ArrayList<Object>(); al.add(getCidx()); al.add(getCpname()); al.add(getCprate()); al.add(getCpuse()); al.add(getCpdate()); al.add(getIndate()); //al.removeAll(Arrays.asList("",null)); al.removeAll(Collections.singletonList(null)); return al; } }
2-4. 쿠폰 수정
1.View
<%@ 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" method="post" action="./coupon_modifyok.do"> <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" checked>사용함 <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)}"> <input type="button" value="쿠폰 수정" onclick="cpmodify()"> </form> </body> <script> 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.submit(); } </script> </html>
2. Controller
@Controller public class shop_main { @Autowired BasicDataSource datasource; //얘도 클래스 PrintWriter pw = null; /*select 에서만 사용함*/ Connection con = null; //원래는 모듈에 들어가야함 PreparedStatement ps = null; ResultSet rs = null; //쿠폰 수정 버튼 @RequestMapping("/coupon_modifyok.do") public String coupon_modifyok(@ModelAttribute("cp") coupon_dao dao, HttpServletResponse res,Model m) throws IOException { res.setContentType("text/html;charset=utf-8"); coupon_update cu = new coupon_update(); String callback = cu.modifyok(datasource,dao); this.pw = res.getWriter(); //결과 값에 맞는 조건식 if(callback=="Y") { //equals 쓰면 오류남 this.pw.write("<script>" + "alert('정상적으로 쿠폰이 수정 되었습니다..');" + "location.href='./coupon_list.do';" + "</script>"); m.addAttribute("md_info", dao.lists()); }else { this.pw.write("<script>" + "alert('데이터 오류로 인하여 쿠폰이 등록되지 않았습니다.');" + "history.go(-1);" + "</script>"); } return null; } //쿠폰 정보 수정 페이지 @GetMapping ("/coupon_modify.do") String coupon_modify(int cidx,coupon_dao dao, Model m) throws Exception { coupon_update cu = new coupon_update(); //DB정보, dao, db고유값 해당 메소드로 전달 (Setter로 이용하기 위해서) cu.select_one(datasource, dao, cidx); //최종값은 getter값을 배열로 제작 후 view(jstl) 형태로 이관 m.addAttribute("info",dao.lists()); return null; }
3. Module
⑴ 쿠폰 수정 모듈 - modifyok 메소드
⑵ 쿠폰 수정 페이지 출력 모듈 - select_one 메소드
public class coupon_update { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; public void select_one(BasicDataSource dataSource, coupon_dao dao, int cidx) throws Exception{ try { String sql = "select * from coupon where cidx=?"; this.con = dataSource.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(); } } String result=""; //쿠폰 수정 public String modifyok(BasicDataSource datasource, coupon_dao dao) { try { this.con = datasource.getConnection(); String sql = "update coupon set cpname=?, cprate=?, cpuse=?,cpdate=?,indate=? where cidx=?"; this.ps = this.con.prepareStatement(sql); this.ps.setString(1, dao.getCpname()); this.ps.setInt(2, dao.getCprate()); this.ps.setString(3, dao.getCpuse()); this.ps.setString(4, dao.getCpdate()); this.ps.setString(5, dao.getIndate()); this.ps.setInt(6, dao.getCidx()); this.ps.executeUpdate(); this.result="Y"; } catch (Exception e) { e.printStackTrace(); this.result="N"; System.out.println("에러"); } return this.result; } }
2-5. 쿠폰 삭제
1.Module
⑴ del_result 메소드 : 결과 값을 리턴 받는 string 메소드
public class coupon_insert { Connection con = null; PreparedStatement ps = null; String rs = ""; //결과 값을 리턴하는 변수 public String del_result(BasicDataSource datasource , int cidx) throws SQLException { try { this.con = datasource.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) { e.printStackTrace(); System.out.println("db 쿼리문 오류 발생"); this.rs = "N"; }finally { this.ps.close(); this.con.close(); } return this.rs; }
2.View
-> 리스트 출력 파트 view 를 그대로사용 (받아오는 부분만 올려둠)
3.Controller
⑴ 쿠폰 단일 삭제
-> view page 필요없어서 void로 씀
-> 쿠폰의 idx 값을 받아와서 처리 (get으로 넘겨받음)
@Controller public class shop_main { @Autowired BasicDataSource datasource; //얘도 클래스 PrintWriter pw = null; @GetMapping("/coupon_del.do") //view page 필요없어서 void로 씀 public void coupon_del(int cidx,HttpServletResponse res) throws Exception { String callback = new coupon_insert().del_result(datasource, cidx); res.setContentType("text/html;charset=utf-8"); 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(); }
⑵ 쿠폰 여러개 체크박스 선택 후 삭제
-> 삭제 할 쿠폰 idx값을 배열로 받아와서 모듈로 넘김
@Controller public class shop_main { @Autowired BasicDataSource datasource; //얘도 클래스 PrintWriter pw = null; @RequestMapping(value="/coupon_del_list.do",method=RequestMethod.POST) public void coupon_del_list(String arr, int del_list, HttpServletResponse res) throws Exception { res.setContentType("text/html;charset=utf-8"); String[] data = arr.split(","); ArrayList<String> al = new ArrayList<String>(Arrays.asList(data)); String callback="Y"; int w=0; while(w<al.size()) { String callback_2 = new coupon_insert().del_result(datasource, Integer.parseInt(al.get(w))); if(callback_2=="N") { callback="N"; } w++; } 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(); }
1. dao 생성 (coupon_dao.java)
⑴ 컬럼명과 동일하게 변수 생성
⑵ 쿠폰 리스트 Module - select 에 사용할 1차 클래스 배열 생성
① Collections.singletonList(null) 을 통해 null 값 까지 출력되는 것을 막음
- 코드 예시 )
@Setter @Getter public class member_dao { int uidx; String uid,upass,uname,ujoin; //select에 사용할 1차 클래스 배열 public ArrayList<Object> lists(){ ArrayList<Object> al = new ArrayList<Object>(); al.add(getCidx()); al.add(getCpname()); al.add(getCprate()); al.add(getCpuse()); al.add(getCpdate()); al.add(getIndate()); al.removeAll(Collections.singletonList(null)); return al; } }
2. Controller (shop_main.java)
⑴ 쿠폰 생성 Controller
① 데이터 소스, dao 를 module(coupon_insert()로 넘김) 에 넘김
② 모듈클래스 coupon_insert의 result 메소드를 로드해서 데이터소스를 넘겨서
결과 값( callback )을 리턴받아옴
⑵ 쿠폰 리스트 Controller
① 리스트에 필요한 컬럼만 가져오면 되므로 알맞은 쿼리문 작성
-> ex ) select cidx,cpname,cprate,cpuse from coupon order by cidx desc
② 모듈에서 1차배열로 받은 데이터를 2차배열로 다시 받아옴 (가져올 때 getString 은 1번부터 시작함)
-> 쿠폰 별로 쿠폰 정보를 다 긁어오기 위함
-> 긁어온 데이터를 jstl로 coupon_list.jsp 에 출력하기 위해 coupon_list 의 인자값을
Model 자료형으로 함
- 코드 예시 )
@Controller public class shop_main { @Autowired BasicDataSource datasource; //얘도 클래스 PrintWriter pw = null; /*select 에서만 사용함*/ Connection con = null; //원래는 모듈에 들어가야함 PreparedStatement ps = null; ResultSet rs = null; //쿠폰 리스트 (M:dao, C:coupon_list V:jsp) @GetMapping("/coupon_list.do") public String coupon_list(Model m) throws Exception{ try { this.con = datasource.getConnection(); String sql = "select cidx,cpname,cprate,cpuse from coupon order by cidx desc"; this.ps = this.con.prepareStatement(sql); this.rs = this.ps.executeQuery(); //1차배열 및 setter, getter coupon_dao cd = new coupon_dao(); //2차배열 ArrayList<ArrayList<Object>> all = new ArrayList<ArrayList<Object>>(); int ctn = 0; while(this.rs.next()) { ctn = this.rs.getRow();//auto_increment와는 다른 객체 cd.setCidx(Integer.parseInt(this.rs.getString(1))); //0번이 아니라 1번부터 시작해야함 cd.setCpname(this.rs.getString(2)); cd.setCprate(Integer.parseInt(this.rs.getString(3))); cd.setCpuse(this.rs.getString(4)); all.add(cd.lists()); }; // VIEW 로 보냄(JSTL 로 해당 데이터를 이관) //데이터 총 갯수 m.addAttribute("ctn",ctn); //데이터 리스트 배열 m.addAttribute("all_list",all); } catch (Exception e) { System.out.println("DB연결오류발생"); }finally { this.rs.close(); this.ps.close(); this.con.close(); } return null; } @RequestMapping(value="/coupon_writeok.do",method=RequestMethod.POST) //void : view 페이지 안쓰겠다는 것 ->Httpservletresponse 써야 printwrite 찍을 수 있음 public void coupon_writeok(@ModelAttribute("coupon") coupon_dao dao, HttpServletResponse res)throws Exception{ res.setContentType("text/html;charset=utf-8"); //데이터 소스 전체를 넘김 , coupon_insert ci = new coupon_insert(); String callback = ci.result(datasource,dao); this.pw = res.getWriter(); if(callback=="Y") { //equals 쓰면 오류남 this.pw.write("<script>" + "alert('정상적으로 쿠폰이 등록 되었습니다.');" + "location.href='./coupon_list.do';" + "</script>"); }else { this.pw.write("<script>" + "alert('데이터 오류로 인하여 쿠폰이 등록되지 않았습니다.');" + "history.go(-1);" + "</script>"); } } }
3. Module ( coupon_insert.java -> 실무에서는 coupon_ddl 등 으로 생성함:쿼리문 다들어가도록)
⑴ 쿠폰 생성 module
- controller 에서 던진 DB정보 및 setter 값을 받아서 insert 실행
⑵ 쿠폰 삭제 module
- 코드 예시 )
public class coupon_insert { Connection con = null; PreparedStatement ps = null; String rs = ""; //결과 값을 리턴하는 변수 //DB정보 및 setter 값을 받아서 insert 실행 public String result (BasicDataSource datasource,coupon_dao dao) { try { this.con = datasource.getConnection(); String sql = "insert into coupon values('0',?,?,?,?,now())"; this.ps = this.con.prepareStatement(sql); this.ps.setString(1, dao.getCpname()); this.ps.setInt(2, dao.getCprate()); this.ps.setString(3, dao.getCpuse()); this.ps.setString(4, dao.getCpdate()); this.ps.executeUpdate(); this.rs ="Y"; //승인 확정 this.ps.close(); this.con.close(); } catch (Exception e) { this.rs = "N"; //오류 발생 } return rs; //결과 값을 리턴 } }
4. 쿠폰리스트 출력 ( View )
⑴ controller 에서 받은 데이터( 2차배열 ) JSTL로 출력
⑵ varStatus = "status" 속성 사용법 : forEach 에 대한 정보값을 설정하는 코드
① .index : 노드번호 0부터 시작
② .count : 1부터 시작하는 번호
③ .last : 맨 마지막 번호값 (true : 마지막 데이터일경우 / false : 다음 데이터가 있는 상황)
④ .begin : 시작번호
⑤ .end : 종료 번호
⑥ .step : 증가값
⑶ 코드 예시 )
① coupon_lis.jsp (View) 출력 되는 페이지<%@ 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> <p>쿠폰 등록 총 데이터 : ${ctn}EA</p> <table border="1" cellpading="0" cellspacing="0"> <thead> <tr> <th>번호</th> <th>쿠폰명</th> <th>할인율</th> <th>사용 유/무</th> <th>수정/삭제</th> </tr> </thead> <tbody> <form id="frm" method="post" action="./coupon_del_list.do"> <input type="hidden" name="arr"> <cp:forEach var="cpdata" items="${all_list}" varStatus="status"> <tr> <td><!--${ctn - status.index}--> <input type="checkbox" id="del_list" name="del_list" value="${cpdata.get(0)}"> </td> <td>${cpdata.get(1)}</td> <td>${cpdata.get(2)}</td> <td>${cpdata.get(3)}</td> <td> <input type="button" value="수정" onclick="coupon_modify('${cpdata.get(0)}')"> <input type="button" value="삭제" onclick="coupon_del('${cpdata.get(0)}')"> </td> </tr> </cp:forEach> </form> </tbody> </table> <input type="button" value="선택 삭제" onclick="choice_del()"> </body> <script> function choice_del() { const arr = []; const no = document.getElementsByName("del_list"); for (let i = 0; i < del_list.length; i++) { // 속성중에 체크 된 항목이 있을 경우 if (del_list[i].checked == true) { arr.push(del_list[i].value); } } document.getElementsByName("arr")[0].value=arr; frm.submit(); } function coupon_del(no) { if(confirm("해당 쿠폰 삭제시 복구 되지 않습니다.")) location.href='./coupon_del.do?cidx='+no; } function coupon_modify(no) { location.href='./coupon_modify.do?cidx='+no; } </script> </html>
② 출력 시키는 Module (coupon_dao.java)
-> jstl 로 리스트를 띄우기 위해 데이터를 클래스 배열에 담아서 jsp 로 이관@Getter @Setter public class coupon_dao { int cidx, cprate; String cpname, cpuse, cpdate, indate; //select에 사용할 1차 클래스 배열 public ArrayList<Object> lists(){ ArrayList<Object> al = new ArrayList<Object>(); al.add(getCidx()); al.add(getCpname()); al.add(getCprate()); al.add(getCpuse()); al.add(getCpdate()); al.add(getIndate()); //al.removeAll(Arrays.asList("",null)); al.removeAll(Collections.singletonList(null)); return al; } }
③ 쿠폰 리스트 출력 Controller 파트@GetMapping("/coupon_list.do") public String coupon_list(Model m) throws Exception{ try { this.con = datasource.getConnection(); String sql = "select cidx,cpname,cprate,cpuse from coupon order by cidx desc"; this.ps = this.con.prepareStatement(sql); this.rs = this.ps.executeQuery(); //1차배열 및 setter, getter coupon_dao cd = new coupon_dao(); //2차배열 ArrayList<ArrayList<Object>> all = new ArrayList<ArrayList<Object>>(); int ctn = 0; while(this.rs.next()) { ctn = this.rs.getRow();//auto_increment와는 다른 객체 //0번이 아니라 1번부터 시작해야함 cd.setCidx(Integer.parseInt(this.rs.getString(1))); cd.setCpname(this.rs.getString(2)); cd.setCprate(Integer.parseInt(this.rs.getString(3))); cd.setCpuse(this.rs.getString(4)); all.add(cd.lists()); }; // VIEW 로 보냄(JSTL 로 해당 데이터를 이관) //데이터 총 갯수 m.addAttribute("ctn",ctn); //데이터 리스트 배열 m.addAttribute("all_list",all); } catch (Exception e) { System.out.println("DB연결오류발생"); }finally { this.rs.close(); this.ps.close(); this.con.close(); } return null; }
5. 쿠폰 삭제 기능
'Spring' 카테고리의 다른 글
Spring - I/O + DB gallaryboard 제작 (0) | 2024.07.11 |
---|---|
Spring - I/O 파일 업로드, 저장 (0) | 2024.07.11 |
legacy project 생성 (0) | 2024.07.09 |
Database 연결 (Spring) (0) | 2024.07.09 |
JSTL 사용법 (0) | 2024.07.09 |