41기 개발자과정

20210927 리스트에서 update, insert, delete

segment 2021. 9. 27. 12:45

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, update 등을 바로 추가해줄 수 있다.

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행의 삭제버튼 실행 후 화면