저번 시간에 이어서
updateMember.jsp
<%@page import="java.sql.Statement"%>
<%@page import="javax.naming.NamingException"%>
<%@page import="javax.naming.Context"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
Connection conn = null;//데이터 베이스 접속
PreparedStatement pstmt = null;// DB에 SQL 전달
ResultSet rs = null;//결과값
DataSource ds = null;//DataSource 객체를 통해서 필요한 Connection을 획득, 반납 등의 작업
%>
<%
try{
Context ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");//캐스팅
conn = ds.getConnection();
System.out.println("DBCP 연동 성공");//DBCP 연동을 위한 설정
StringBuffer selectQuery = new StringBuffer(); //쿼리
selectQuery.append("SELECT name, class, tel FROM MEMBER2 WHERE ID = ?");
//? 가 있는 이유 : 아이디 값을 받기 위해(파라미터를 받기 위해)
String id = request.getParameter("id");//viewMember에서 준 데이터 받기)
pstmt = conn.prepareStatement(selectQuery.toString());
pstmt.setString(1, id);//sql문을 받고 ?에 매개변수 userID 삽입 //결과는 id 하나만 가지고 온다.(뭔소리이지?)
rs = pstmt.executeQuery();//쿼리 실행
if(rs.next()){ //원래 반복문인데 이 예제는 id를 pk로 삼아 확인하면 되는거이기 때문
%>
<form method="post" action="updateProcess.jsp">
아이디 : <input readonly type="text" name = "id" value="<%= id %>"><br>
<!-- 'readonly' 오로지 읽기만 가능(수정 안됨) -->
이름 : <input type="text" name = "name" value="<%= rs.getString("name") %>"><br>
<!-- rs.getString("name")을 쓰는 이유 : name의 값을 받아야하기 때문 -->
회원등급 : <input type="text" name = "mclass" value="<%= rs.getString("class") %>"><br>
전화번호 : <input type="text" name = "tel" value="<%= rs.getString("tel") %>"><br>
<input type="submit" value="수정">
<a href="viewMember.jsp">목록보기</a>
</form>
<%
}else{ //데이터 삭제하였을때 발생
%>
<font color ="red"> 아이디 없3~~~</font>
<a href="viewMember.jsp">목록보기</a>
<%
}
}catch(NamingException ne){
ne.printStackTrace();
}catch(SQLException ex) {
out.print("데이터베이스 연결이 실패했습니다.<br>");
out.print("SQLException : "+ex.getMessage());
} finally {
try{
}catch(Exception e){
e.printStackTrace();
}
if(conn != null) {
conn.close();
}
}
%>
</body>
</html>
viewMember.jsp(먼저 실행)
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%!
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "scott";
String password = "tiger";
String selectQuery = "SELECT * FROM MEMBER2";
%>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<table width="400" border="1">
<tr>
<td>아이디</td>
<td>이름</td>
<td>등급</td>
<td>전화번호</td>
</tr>
<%
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement();
rs = stmt.executeQuery(selectQuery); //쿼리 결과를 rs로 받음
while(rs.next()) {
%>
<tr>
<%-- <td><%= rs.getString("id") %></td> --%>
<td>
<a href = "updateMember.jsp?id=<%= rs.getString("id") %>"><%-- 실제 이동하는 거--%>
<%= rs.getString("id") %><%-- 화면에 보여주는거 --%>
</a>
</td>
<td>
<%= rs.getString("name") %>
</td>
<%-- <td><%= rs.getInt("class") %></td> 주석 : Ctrl+Shift+/ --%>
<td>
<%
int n_class = rs.getInt("class");
if(n_class == 1) {
out.print("일반회원");
} else {
out.print("교수님");
}
%>
</td>
<td><%= rs.getString("tel") %></td>
</tr>
<%
}
} catch(SQLException ex) {
ex.getMessage();
} finally {
try {
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
} catch(SQLException ex) {
ex.getMessage();
}
}
%>
</table>
</body>
</html>
updateProcess.jsp 생성
<%@page import="javax.naming.InitialContext"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.NamingException"%>
<%@page import="javax.naming.Context"%>
<%@page import="java.sql.SQLException"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
Connection conn = null;//데이터 베이스 접속
PreparedStatement pstmt = null;// DB에 SQL 전달
%>
<%
try {
conn = ((DataSource)(new InitialContext().lookup("java:comp/env/jdbc/oracle"))).getConnection();//캐스팅 필요
} catch(NamingException ne) { //JDBC? 이름 못찾을 때
ne.printStackTrace();
} catch(SQLException ex) { //데이터베이스 문제 있을 때
ex.getMessage();
}
String id = "", name="", vclass="", tel="";
id = request.getParameter("id");
name = request.getParameter("name");
vclass = request.getParameter("mclass");
tel = request.getParameter("tel");
StringBuffer updateQuery = new StringBuffer(); //쿼리
updateQuery.append("UPDATE MEMBER2 SET NAME = ?, CLASS = ?, TEL = ? WHERE ID =?");
//?에 전달된 값을 받는다.(name,id,vclass등...)
try{//update에 관련된거
pstmt = conn.prepareStatement(updateQuery.toString());
pstmt.setString(1, name); //값을 넣기 위해(세팅하기 위해서)사용//id는 수정불가능하니깐!!!+걍 쿼리에서 ?된거만 넣음
pstmt.setInt(2, Integer.parseInt(vclass));//캐스팅 형변환(vclass는 숫자임)
pstmt.setString(3, tel);
pstmt.setString(4, id);
int re = pstmt.executeUpdate();//데이터베이스에서 데이터를 추가, 삭제, 수정하는 SQL 문을 실행
if(re ==1){
%>
<%= id %>의 정보가 수정되었습니다.
[<a href="viewMember.jsp">목록보기</a>]
<%
}else{//이미 기존의 데이터가 삭제되었을때
%>
변경실패
<%
}
}catch(SQLException ex) { //데이터베이스 문제 있을 때
out.print("데이터베이스 연결이 실패했습니다.<br>");
out.print("SQLException : "+ex.getMessage());
} finally { //Connection 관련 close
try {
if(conn != null) {
conn.close();
}
} catch(Exception e) {
e.printStackTrace();
}
}
%>
</body>
</html>
데이터 변경 쿼리를 예로 들면
UPDATE MEMBER2
SET NAME ='임영웅'
, CLASS = 2
, TEL ='010-9999-8888'
WHERE ID ='bbb';
이런 쿼리를 사용한다고 할때, 실제 jsp 테이블에서는
"UPDATE MEMBER2 SET NAME = ?, CLASS = ?, TEL = ? WHERE ID =?"
으로 바꿔주어야함
📌우리가 최종적으로 만들어야하는 프로젝트의 모습
Dynamic Wep Project 생성 후,
member 폴터에 login.jsp, register.jsp, script.jsp 생성
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<table border="1" >
<form method="post" action="LoginOk.jsp" >
<tr height="30">
<td width="100">
사용자 ID
</td>
<td width="100">
<input type="text">
</td>
</tr>
<tr>
<td width="100">
비밀번호
</td>
<td width="100">
<input type="password">
</td>
</tr>
<tr>
<td colspan = "2" align="center">
<input type="submit" value="로그인">
<input type="button" value="회원가입" onclick="javascirpt:window.location='register.jsp'">
</td>
</tr>
</form>
</table>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<script language="JavaScript" src="script.js" charset="utf-8"></script>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<table border="1" align ="center">
<form name="reg_frm" method="post" action="registerOk.jsp">
<tr height="50">
<td colspan = "2">
<h1>회원 가입 신청</h1>
'*'표시 항목은 필수 입력 항목입니다.
</td>
</tr>
<tr height="30">
<td width="80">User ID</td >
<td><input type="text" size ="20" name="mem_uid" >*</td>
</tr>
<tr height="30">
<td width="80">암호</td>
<td><input type="password" size ="20" name="mem_pwd">*</td>
</tr>
<tr height="30">
<td width="80">암호 확인</td>
<td><input type="password" size ="20" name="pwd_check">*</td>
</tr>
<tr height="30">
<td width="80">이 름</td>
<td><input type="text" size ="20" name= "name">*</td>
</tr>
<tr height="30">
<td width="80">E-mail</td>
<td><input type="text" size ="30"name="email">*</td>
</tr>
<tr height="30">
<td width="80">주 소</td>
<td><input type="text" size ="40"name="address"></td>
</tr>
<tr>
<td colspan = "2" align="center">
<input type="button" value="등록" onclick="check_ok()">
<input type="reset" value="다시입력">
<input type="button" value="가입안함" onclick="javascript:window.location='login.jsp'">
</td>
</tr>
</form>
</table>
</body>
</html>
function check_ok(){
//if(document.reg_frm.mem_uid.value==""){
//if(reg_frm.mem_uid.value==""){
if(reg_frm.mem_uid.value.length==0){
alert("아이디를 써주세요");
reg_frm.mem_uid.focus();
return;//아이디가 없으면 리턴
}
if(reg_frm.mem_uid.value.length < 4){
alert("아이디는 4글자이상이어야 합니다.");
reg_frm.mem_uid.focus();
return;//아이디가 없으면 리턴
}
if(reg_frm.mem_pwd.value.length == 0){
alert("패스워드는 반드시 입력해야 합니다.");
reg_frm.mem_pwd.focus();
return;//패스워드가 없으면 리턴
}
if( reg_frm.pwd_check.value != reg_frm.mem_pwd.value){
alert("패스워드가 일치하지 않습니다.");
reg_frm.pwd_check.focus();
return;//패스워드가 일치하지 않으면 리턴
}
document.reg_frm.submit(); //입력값이 조건에 다 맞으면 action="registerOk.jsp"으로 가겠다.(전송/submit)
}