20210927 리스트에서 update, insert, delete
1. 수정화면 작성하기
- 단계마다 실행해서 오류가 없는지 확인
- 전체코드 작성 후 실행 x
m_list.jsp
수정버튼에 m_update_form.jsp 링크
<tr>
<td><%= rs.getString("m_id")%></td>
<td><%= rs.getString("m_pw")%></td>
<td><%= rs.getString("m_level")%></td>
<td><%= rs.getString("m_name")%></td>
<td><%= rs.getString("m_email")%></td>
<td>
<a href ="<%= request.getContextPath()%>/mupdate/m_update_form.jsp?send_id=<%= rs.getString("m_id")%>">수정버튼</a>
</td>
<td>삭제버튼</td>
</tr>
<a href ="<%= request.getContextPath()%>/mupdate/m_update_form.jsp?send_id=<%= rs.getString("m_id")%>">수정버튼</a>
수정 버튼을 눌렀을 때 수정 화면으로 넘어가게 되며,
해당 아이디의 값을 send_id라는 변수에 담아 url 경로와 함께 이동하게 된다.
위의 코드에서 send_id가 m_update_form.jsp으로 넘어오는지 확인
<%
String send_id = request.getParameter("send_id");
System.out.println(send_id+"<--send_id");
%>
콘솔창에서 확인 :
받아온 send_id 값을 이용하여 해당 아이디의 행을 조회 할 수 있다.
m_id~ m_email에 담긴 값을 가져와야한다.
중괄호 블록 밖에서 선언된 변수는 안쪽에서 쓸 수 있고, 중괄호 블록 안에서 선언된 변수는 밖에서 쓸 수 없다.
-->
1. 중괄호 밖에서 dbid ~ dbemail 선언
String dbid = null;
String dbpw = null;
String dblevel = null;
String dbname = null;
String dbemail = null;
2. 중괄호 안에서 값 받아옴
dbid = rs.getString("m_id");
dbpw = rs.getString("m_pw");
dblevel = rs.getString("m_level");
dbname = rs.getString("m_name");
dbemail = rs.getString("m_email");
System.out.println(dbid+"<- dbid");
System.out.println(dbpw+"<-dbpw");
System.out.println(dblevel+"<-dblevel");
System.out.println(dbname+"<-dbname");
System.out.println(dbemail+"<- dbemail");
3.
수정화면은 입력화면을 복사해서 일부 수정해준다.
dbid ~ dbemail 에 담긴 값을 가져온다.
<td><input type="text" name="m_id" size="20" readonly value="<%= dbid %>"></td>
m_update_form.jsp 전체코드
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.ResultSet" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%@ page import = "java.sql.SQLException" %>
<!-- 1단계 : 드라이버 로딩
2단계 : db연결
3단계 : select 쿼리 실행 준비 :
SELECT * FROM tb_member WHERE m_id=?
4단계 : 쿼리 실행 후 resultSet 객체 생성 후 쿼리 실행 결과를 담는다.
5단계 : 쿼리 실행 후 결과 사용 : 수정화면에 출력
6,7,8 단계 : 객체 종료 -->
<%
String send_id = request.getParameter("send_id");
System.out.println(send_id+"<--send_id");
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
//JDBC 프로그램 순서
//01단계 :드라이버 로딩 시작
Class.forName("com.mysql.jdbc.Driver");
String dbid = null;
String dbpw = null;
String dblevel = null;
String dbname = null;
String dbemail = null;
try{
String jdbcDriver = "jdbc:mysql://localhost:3306/dev41db?" +
"useUnicode=true&characterEncoding=euckr";
String dbUser = "dev41id";
String dbPass = "dev41pw";
conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
System.out.println(conn + "<-- conn m_update_form.jsp");
pstmt = conn.prepareStatement("SELECT * FROM tb_member WHERE m_id=?");
pstmt.setString(1, send_id);
System.out.println(pstmt + "<-- pstmt");
rs = pstmt.executeQuery();
//System.out.println(rs.next()+ "<-- rs.next() m_update_form.jsp");
// 5단계 : 쿼리 실행 결과 사용(수정화면)
if(rs.next()){
System.out.println("if 조건문 실행 m_update_form.jsp");
dbid = rs.getString("m_id");
dbpw = rs.getString("m_pw");
dblevel = rs.getString("m_level");
dbname = rs.getString("m_name");
dbemail = rs.getString("m_email");
System.out.println(dbid+"<- dbid");
System.out.println(dbpw+"<-dbpw");
System.out.println(dblevel+"<-dblevel");
System.out.println(dbname+"<-dbname");
System.out.println(dbemail+"<- dbemail");
}
} catch(SQLException ex) {
out.println(ex.getMessage());
ex.printStackTrace();
} finally {
if (rs != null) try { rs.close(); } catch(SQLException ex) {}
if (pstmt != null) try { pstmt.close(); } catch(SQLException ex) {}
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
}
%>
<!-- // 5단계 : 쿼리 실행 결과 사용(수정화면) -->
<form action="<%= request.getContextPath() %>/minsert/m_insert_action.jsp" method="post">
<table border="1">
<tr>
<td>아이디</td>
<td><input type="text" name="m_id" size="20" readonly value="<%= dbid %>"></td>
<tr>
<tr>
<td>암호</td>
<td><input type="text" name="m_pw" size="20" value="<%= dbpw %>"></td>
<tr>
<tr>
<td>권한</td>
<td><input type="text" name="m_level" size="20" value="<%= dblevel %>"></td>
<tr>
<tr>
<td>이름</td>
<td><input type="text" name="m_name" size="20" value="<%= dbname %>"></td>
<tr>
<tr>
<td>이메일</td>
<td><input type="text" name="m_email" size="20" value="<%= dbemail %>"></td>
<tr>
<tr>
<td colspan="4"><input type="submit" value="수정버튼"></td>
</tr>
</table>
</form>
최종 출력화면 :
-> id002 의 수정버튼 클릭 후 화면
2. 수정화면에서 수정하기
m_update_action.jsp
insert 쿼리문장이 update 쿼리문장으로 변경되고
m_id가 5번으로 변경되었다.
변경되는 코드 :
m_id를 조회해서(readonly) pw ~ email을 수정하는 작업이므로,
m_id가 5번으로 변경되었다.
전체코드 :
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%@ page import = "java.sql.SQLException" %>
<%
request.setCharacterEncoding("euc-kr");
Connection conn = null;
PreparedStatement pstmt = null;
String m_id = request.getParameter("m_id");
String m_pw = request.getParameter("m_pw");
String m_level = request.getParameter("m_level");
String m_name = request.getParameter("m_name");
String m_email = request.getParameter("m_email");
System.out.println(m_id + "<-- m_id /minsert/m_update_action.jsp");
System.out.println(m_pw + "<-- m_pw /minsert/m_update_action.jsp");
System.out.println(m_level + "<-- m_level /minsert/m_update_action.jsp");
System.out.println(m_name + "<-- m_name /minsert/m_update_action.jsp");
System.out.println(m_email + "<-- m_email /minsert/m_update_action.jsp");
Class.forName("com.mysql.jdbc.Driver");
String jdbcDriver = "jdbc:mysql://localhost:3306/dev41db?" +
"useUnicode=true&characterEncoding=euckr";
String dbUser = "dev41id";
String dbPass = "dev41pw";
conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
System.out.println(conn + "<-- conn ");
pstmt = conn.prepareStatement(
"UPDATE tb_member SET m_pw=?, m_level=?, m_name=?, m_email=? WHERE m_id=?");
System.out.println(pstmt + "<-- pstmt 1");
pstmt.setString(1, m_pw);
pstmt.setString(2, m_level);
pstmt.setString(3, m_name);
pstmt.setString(4, m_email);
pstmt.setString(5, m_id);
System.out.println(pstmt + "<-- pstmt 2");
int result = pstmt.executeUpdate();
System.out.println(result + "<-- result");
pstmt.close();
conn.close();
%>
관리자 ---> 관리자2222 로 변경되었다.
3. 삭제하기
delete 가 정상적으로 실행되는지 확인하고 내용을 가져온다.
변경되는 내용 :
전달받은 send_id 값만 담으면 전체 행을 삭제한다.
전체코드 :
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- 0단계 : 아이디 값을 받아 확인한다.
jdbc 1~7단계 참고하면 삭제처리 할 수 있다.
-->
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%@ page import = "java.sql.SQLException" %>
<%
String send_id = request.getParameter("send_id");
System.out.println(send_id+"<--send_id");
request.setCharacterEncoding("euc-kr");
Connection conn = null;
PreparedStatement pstmt = null;
String m_id = request.getParameter("m_id");
String m_pw = request.getParameter("m_pw");
String m_level = request.getParameter("m_level");
String m_name = request.getParameter("m_name");
String m_email = request.getParameter("m_email");
System.out.println(m_id + "<-- m_id /mdelete/m_delete_action.jsp");
System.out.println(m_pw + "<-- m_pw /mdelete/m_delete_action.jsp");
System.out.println(m_level + "<-- m_level /mdelete/m_delete_action.jsp");
System.out.println(m_name + "<-- m_name /mdelete/m_delete_action.jsp");
System.out.println(m_email + "<-- m_email /mdelete/m_delete_action.jsp");
Class.forName("com.mysql.jdbc.Driver");
String jdbcDriver = "jdbc:mysql://localhost:3306/dev41db?" +
"useUnicode=true&characterEncoding=euckr";
String dbUser = "dev41id";
String dbPass = "dev41pw";
conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
System.out.println(conn + "<-- conn ");
pstmt = conn.prepareStatement(
"DELETE FROM tb_member WHERE m_id=?");
System.out.println(pstmt + "<-- pstmt 1");
pstmt.setString(1, send_id);
int result = pstmt.executeUpdate();
System.out.println(result + "<-- result");
pstmt.close();
conn.close();
%>
4. 입력화면과 리스트를 한 화면에서 처리하고 결과를 보여준다.
m_list.jsp 에 m_insert_form을 include 해준다.
<%@ include file="/minsert/m_insert_form.jsp" %>
전체코드:
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%@ page import = "java.sql.ResultSet" %>
<%@ page import = "java.sql.SQLException" %>
<%@ include file="/minsert/m_insert_form.jsp" %>
회원 리스트 <br>
<table width="100%" border="1">
<tr>
<td>아이디</td><td>비번</td><td>권한</td><td>이름</td><td>이메일</td><td>수정</td><td>삭제</td>
</tr>
<%
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
//JDBC 프로그램 순서
//01단계 :드라이버 로딩 시작
Class.forName("com.mysql.jdbc.Driver");
//01단계 :드라이버 로딩 끝
try{
//02단계 :DB연결(Connection)시작
String jdbcDriver = "jdbc:mysql://localhost:3306/dev41db?" +
"useUnicode=true&characterEncoding=euckr";
String dbUser = "dev41id";
String dbPass = "dev41pw";
conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
//02단계 :DB연결(Connection)끝
System.out.println(conn + "<-- conn m_list.jsp");
if(conn != null){
out.println("01 DB연결 성공");
}else{
out.println("02 DB연결 실패");
}
//03단계 :Query실행을 위한 statement 또는 prepareStatement객체생성 시작
pstmt = conn.prepareStatement("select * from tb_member");
System.out.println(pstmt + "<-- pstmt");
//04단계 :Query실행 시작
rs = pstmt.executeQuery();
//executeQuery --> select쿼리 실행-------------------
System.out.println(rs + "<-- rs m_list.jsp");
//System.out.println(rs.next() + "<-- rs.next() m_list.jsp");
//System.out.println(rs.next() + "<-- rs.next() m_list.jsp");
//04단계 :Query실행 끝
//05단계 :Query실행결과 사용
//System.out.println(rs.next() + "<-- rs.next() m_list.jsp");
//--- select문장 통해서 모든 회원 목록 가져와서 한줄씩 (레코드(record) or 로우(row))보여준다 시작
while(rs.next()){
//true false로 리턴하는 메서드(boolean)
%>
<tr>
<td><%= rs.getString("m_id")%></td>
<td><%= rs.getString("m_pw")%></td>
<td><%= rs.getString("m_level")%></td>
<td><%= rs.getString("m_name")%></td>
<td><%= rs.getString("m_email")%></td>
<td>
<a href ="<%= request.getContextPath()%>/mupdate/m_update_form.jsp?send_id=<%= rs.getString("m_id")%>">수정버튼</a>
</td>
<td>
<a href ="<%= request.getContextPath()%>/mdelete/m_delete_action.jsp?send_id=<%= rs.getString("m_id")%>">삭제버튼</a>
</td>
</tr>
<%
/*
out.println(rs.getString("m_id") + "<-- m_id 필드=컬럼 값 in tb_member테이블 <br>");
out.println(rs.getString("m_pw") + "<-- m_pw 필드=컬럼 값 in tb_member테이블 <br>");
out.println(rs.getString("m_level") + "<-- m_level 필드=컬럼 값 in tb_member테이블 <br>");
out.println(rs.getString("m_name") + "<-- m_name 필드=컬럼 값 in tb_member테이블 <br>");
out.println(rs.getString("m_email") + "<-- m_email 필드=컬럼 값 in tb_member테이블 <br><br>");
*/
}
//--- select문장 통해서 모든 회원 목록 가져와서 한줄씩 (레코드(record) or 로우(row))보여준다 끝
} catch(SQLException ex) {
out.println(ex.getMessage());
ex.printStackTrace();
} finally {
// 6. 사용한 Statement 종료
if (rs != null) try { rs.close(); } catch(SQLException ex) {}
if (pstmt != null) try { pstmt.close(); } catch(SQLException ex) {}
// 7. 커넥션 종료
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
}
%>
</table>
m_update_action.jsp / m_delete_action.jsp 에도 아래 코드 추가
jsp에서 작업을 수행 후 지정한 페이지로 이동한다.
response.sendRedirect(request.getContextPath()+"/mlist/m_list.jsp");
회원가입, 수정, 삭제 후 m_list.jsp 로 이동하며,
m_list.jsp 에 포함된 회원가입폼도 include 하여 보여준다.
실행화면 :
---> 1행의 삭제버튼 실행 후 화면