with 짝꿍
A part : 상품 등록페이지 A (sql insert 활용) => product_insert.jsp
B part : 상품 정보 출력 리스트 페이지 B (sql select 활용) => product_list.jsp
db에 저장된 내용이 모두 출력되어야 함
⚡ DB table 생성
create table product(
pidx int(7) unsigned not null auto_increment,
pcode char(7) not null,
pname varchar(100) not null,
pmoney int(8) not null,
pdate timestamp not null default current_timestamp,
primary key(pidx),
unique pd(pcode)
);
만약 sql 날짜만 지정하고 싶다면?
pdate date not null default (curdate()),
⚡ db연결
<%@page import="java.sql.DriverManager"%> <%@page import="java.sql.Connection"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String db_driver = "com.mysql.cj.jdbc.Driver"; String db_url = "jdbc:mysql://localhost:3306/erp"; String db_user = "hana"; String db_pass = "hana1234"; Connection dbcon = null; try{ Class.forName(db_driver); dbcon = DriverManager.getConnection(db_url,db_user,db_pass); }catch(Exception e){ out.print("db 접속이 올바르지 않습니다"); } %>
⚡ insert
- 입력받는 jsp (product_insert.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>상품 등록페이지 A (sql insert 활용)</title> </head> <body> <form id="frm"> <!-- 사실 상품코드는 자동으로 생성 되어야 함 --> 상품 코드 : <input type="text" name="pcode"><br> 상품명 : <input type="text" name="pname"><br> 상품가격 : <input type="text" name="pmoney" maxlength="8"><br><br> <input type="button" value="상품추가" onclick="add_price()"> </form> </body> <script type="text/javascript"> function add_price(){ if(frm.pcode.value == ""){ alert("상품 코드를 입력하세요") }else if(frm.pname.value == ""){ alert("상품명을 입력하세요") }else if(frm.pmoney.value == ""){ alert("상품가격을 입력하세요") }else{ frm.method="post"; frm.action="./product_save.jsp"; frm.submit(); } } </script> </html>
- product_save.jsp<%@page import="java.sql.PreparedStatement"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="./dbconfig.jsp"%> <% request.setCharacterEncoding("utf-8"); String pcode = request.getParameter("pcode"); String pname = request.getParameter("pname"); String pmoney = request.getParameter("pmoney"); String sql = "insert into product values ('0',?,?,?,now())"; PreparedStatement ps = dbcon.prepareStatement(sql); ps.setString(1, pcode); ps.setString(2, pname); ps.setString(3, pmoney); int result = ps.executeUpdate(); if(result > 0){ out.print("<script>alert('상품 등록이 완료되었습니다'); " +"location.href='./product_list.jsp'</script>"); } ps.close(); dbcon.close(); %>
🔽 list 출력
⚡ list 출력 및 delete
👀 list 출력시
- list가 0개일때 보이는 영역도 필요!
- 마지막에 등록한게 제일 위로 가게 출력 : select ~ order by colomn명 desc;
👀 list 삭제시
- 데이터가 삭제되므로 confirm으로 한번 확인할 것!
- 선택삭제 : 배열로 받음
=> getParameterValues : 동일 name을 사용시 해당 값을 원시배열로 받아서 처리
- DDL문을 반복문 안에 넣을시 메모리를 많이 잡아먹는다!
체크된 내용을 전송하는 형태 ( Front-end와 소통으로 전송방식이 변경 됨 )
1. hidden을 이용해서 문자배열 값으로 전송
2. name값 형태로 값을 전송 요고루 해볼거임
3. storage에 배열값을 저장 후 전송
- product_list.jsp
<%@page import="java.sql.ResultSet"%> <%@page import="java.sql.PreparedStatement"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="./dbconfig.jsp" %> <% String sql = "select count(*) as ctn from product"; String sql2 = "select * from product order by pidx desc"; PreparedStatement ps = dbcon.prepareStatement(sql); ResultSet rs = ps.executeQuery(); rs.next(); //총 data 갯수 Integer ea = Integer.parseInt(rs.getString("ctn")); ps=dbcon.prepareStatement(sql2); ResultSet rs2 = ps.executeQuery(); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>상품 정보 출력 리스트 페이지 B - list 출력 및 체크박스 선택삭제 가능 기능</title> </head> <body> <form id="frm"> <table border="1" cellpadding="0" cellspacing="0"> <thead> <tr> <th><input type="checkbox" id="all_check" onclick="all_ck(this.checked)"></th> <th>상품코드</th> <th>상품명</th> <th>상품가격</th> </tr> </thead> <tbody> <% if(ea <= 0){ %> <tr align="center"><td colspan="4">등록된 상품이 없습니다.</td></tr> <% }else{ while(rs2.next()){ %> <tr> <td><input type="checkbox" name="ck" value="<%= rs2.getString("pidx")%>" onclick="ckcount()"></td> <td><%= rs2.getString("pcode")%></td> <td><%= rs2.getString("pname")%></td> <td><%= rs2.getString("pmoney")%></td> </tr> <% } } %> </tbody> </table> <input type="button" value="선택삭제" onclick="delete_data()"> <input type="button" value="상품등록" onclick="gopage()"> </form> </body> <% ps.close(); dbcon.close(); %> <script> //선택삭제 버튼 function delete_data(){ var count = 0; //선택한 체크박스 카운팅하기위한 변수 var ckname_arr = document.getElementsByName("ck"); var w=0; while(w < ckname_arr.length){ //반복문으로 체크갯수 파악 if(ckname_arr[w].checked == true){ count++; } w++; } if(count > 0){ if(confirm("해당 데이터 삭제시 복구되지 않습니다")){ frm.method="post"; frm.action="./product_del.jsp"; frm.submit(); } }else{ alert("선택한 상품이 한개 이상 체크되어야 합니다"); } } //하위 체크박스 모두 체크시 all_check check function ckcount(){ var cc = 0; var ckname_arr = document.getElementsByName("ck"); var w=0; while(w<ckname_arr.length){ if(ckname_arr[w].checked == true){ cc++; } w++; } if(cc == ckname_arr.length){ document.getElementById("all_check").checked = true; }else{ document.getElementById("all_check").checked = false; } } //전체선택 체크박스 function all_ck(z){ //checkbox에 name,class로 처리한 경우 중복사용 가능 => id는 절대 중복 불가능 var ckname_arr = document.getElementsByName("ck"); var w=0; while(w<ckname_arr.length){ ckname_arr[w].checked = z; w++; } } function gopage(){ location.href = "./product_insert.jsp"; } </script> </html>
- product_del.jsp<%@page import="java.sql.PreparedStatement"%> <%@page import="java.util.Arrays"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="./dbconfig.jsp" %> <% request.setCharacterEncoding("utf-8"); String ck[] = request.getParameterValues("ck"); //배열로 받는 법 PreparedStatement ps = null; int w=0; //ddl문을 반복문 안에 넣을시 메모리를 많이 잡아먹는다! String sql = "delete from product where pidx=?"; while(w<ck.length){ //여기에 삭제 query작성 ps = dbcon.prepareStatement(sql); ps.setString(1,ck[w]); ps.executeUpdate(); w++; } out.print("<script>alert('해당 데이터를 정상적으로 삭제했습니다');location.href='./product_list.jsp';</script>"); dbcon.close(); %>
삭제완료
'CLASS > JSP' 카테고리의 다른 글
#4-3 / 파일 업로드(stream) (0) | 2024.06.27 |
---|---|
#4-2 / 첨부파일 여러개 업로드시 사용법 (0) | 2024.06.27 |
#3-3 / 2예제 paging 기능 추가 (0) | 2024.06.26 |
#3-2 / 2예제 고객정보 수정페이지(update) (0) | 2024.06.26 |
#3-1 / 2예제 상세보기-고객별 포인트,구매내역 추가 (0) | 2024.06.26 |