[ITWILL : JSP]JDBC활용 - 회원정보수정페이지만들기

ITWILL학원 : 21강 JSP기초 BY 정규태강사

JDBC

  1. JDBC활용 - import쓰는 이유, form페이지로 받은 데이터를 DB에 insert하는 방법
  2. JDBC활용 - JAVA에서 DB 정보 지우기 2가지방법
  3. JDBC활용 - DB에서 고객정보를 불러와서 HTML테이블에 담기
  4. JDBC활용 - TIMESTAMP주의점, JDBC에서 데이터처리
  5. JDBC활용 - 회원정보수정페이지만들기
  6. JDBC활용 - 회원목록출력하는데 관리자는 빼고 출력하기, 자바 에러 두종류

사용자가 로그인한 뒤 자신의 정보를 수정할 수 있는 마이페이지를 만들어보자.

회원정보를 수정할 수 있는 전제는 로그인이다.
로그인이 되어있지않다면 로그인페이지로 이동시켜야한다.
로그인이 되어있는 사용자는 사용자정보를 DB에서 불러와서 화면에 각 요소를 출력한다 -> 원하는 정보를 수정한 뒤 다시 DB에 업데이트해야한다.

1. 회원정보수정폼 페이지만들기

로그인한 사용자에 한하여 DB에 저장되어있는 해당 회원정보를 FORM형식으로 나타내주는 updateForm.jsp 페이지를 만들어보자.

다음은 회원정보수정폼 작성 순서이다.

1-1. 로그인여부를 먼저 체크. & 한글처리 & 변수로딩

  • 로그인이 되어있지않다면 로그인페이지로 이동
  • id값을 가져올 수 있는 방법이 여기서는 두가지이다,
    1. 기본 방식은 파라미터로 가져오거나 = request.getParameter(“id”)
    2. session을 이용했기에 세션활용. 세션값은 object이기에 String으로 형변환필수 = (String) session.getAttribute(“id”)

1-2.드라이브로드 & DB를 연결.

DB에 저장된 회원정보를 사용해야함으로 드라이브로드 & DB를 연결해야한다.

1-3. SQL 구문작성 & pstmt

  • select구문으로 해당 id에 관한 모든 정보를 DB에서 불러온다
  • 많은 컬럼중에 왜 하필 id일까? => id가 primary key이기 때문이다. primary key를 기준으로 where조건문을 걸어 DB에서 데이터를 select하면 된다.
  • select쿼리이므로 executeQuery()와 executeUpdate()중 executeQuery()를 사용하면 된다.
  • select쿼리이므로 pstmt는 int형 변수에 저장해서 사용하면 된다.

1-4. 실행 -> rs에 결과저장 -> 데이터처리

  • 지역변수에 데이터를 넣어서 사용할 수 있다.
  • 지역변수는 멤버변수처럼 자동으로 초기화되지 않는다. 따라서 직접해줘야한다
  • 지역변수의 초기화값은 데이터타입에 따라 다르다. 초기화값은 보통 0이나 null임. 실무에선 String 초기화시 null보단 “”로 사용한다.
데이터타입 초기화값
int 0
String “”(공백)
배열 0
참조형(Timestamp등) null

1-5. 비밀번호를 입력받은 뒤 사용자가 입력한대로 데이터수정하기 -> updatePro.jsp에서 진행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<%//1. 로그인여부체크 (로그인x->로그인페이지로이동)
request.setCharacterEncoding("UTF-8");
String id = (String) session.getAttribute("id"); //object이기에 형변환필수

if(id == null){
//로그인페이지이동
response.sendRedirect("loginForm.jsp");
}

//2. 드라이브로드 & 디비연결 : 로그인한 사용자의 정보를 가져오기
final String DRIVER = "com.mysql.jdbc.Driver";
final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
final String DBID = "root";
final String DBPW = "1234";

Class.forName(DRIVER);
Connection con = DriverManager.getConnection(DBURL, DBID, DBPW);
System.out.println("드라이브로드와 디비연결성공");

//3. SQL & PSTMT & 실행
String sql = "select * from itwill_member where id=?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);

//4. 실행-> rs에 결과저장 -> 데이터처리
ResultSet rs = pstmt.executeQuery();

//지역변수초기화-자동으로 안됨.

String name = "";
int age = 0;
String gender = "";
String email = "";
Timestamp reg_date = null; // Timestamp의 초기값은 null임

if(rs.next()){
//id=rs.getString("id"); 세션으로 가져와서 필요없음
name = rs.getString("name");
age = rs.getInt("age");
gender = rs.getString("gender");
email = rs.getString("email");
reg_date = rs.getTimestamp("reg_date");
}

//4. gender를 입력안하고 회원가입한경우
if(gender == null){
gender="여";
}

//5. 비밀번호를 입력받은 뒤 수정하기 ->updatePro.jsp에서 진행
%>
<fieldset>
<legend>회원정보수정</legend>
<form action="updatePro.jsp" method="post" name="fr">
아이디 <input type="text" name="id" value="<%=id %>" readonly><br>
비밀번호 <input type="password" name="pw"><br>
이름 <input type="text" name="name" value="<%=name %>"><br>
나이 <input type="text" name="age" value="<%=age %>"><br>
성별
<input type="radio" name="gender" value="여"
<% if(gender.equals("여")){ %>
checked
<%}%>
> 여성
<input type="radio" name="gender" value="남"
<% if(gender.equals("남")){ %>
checked
<%}%>
> 남성<br>
이메일 <input type="text" name="email" value="<%=email %>"><br>
<input type="submit" value="회원정보수정하기">
</form>
</fieldset>

2. 회원정보수정페이지의 데이터처리페이지만들기

아래는 회원정보폼에 수정을 하면 update구문을 실행하는 updatePro.jsp 코드이다.

2-1. 로그인여부를 먼저 체크

  • 로그인이 되어있지않다면 로그인페이지로 이동
  • id값을 가져올 수 있는 방법이 여기서는 두가지이다,
    1. 기본 방식은 파라미터로 가져오거나 = request.getParameter(“id”)
    2. session을 이용했기에 세션활용. 세션값은 object이기에 String으로 형변환필수 = (String) session.getAttribute(“id”)

2-2. 한글처리 & 변수가져오기

변수에 전달된 정보를 저장(아이디,비번,이름,나이,성별,이멜)한다

2-3. 드라이브로드 & DB를 연결.

2-4. SQL 구문작성 & pstmt

수정하고자하는 id정보가 DB에 있는지 select구문으로 판단

2-5. 실행 -> rs에 결과저장 -> 데이터처리

  • 아이디,비번 동일한 경우 => 입력받은 데이터를 DB에 update.
  • 비밀번호오류 => 에러메세지
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<%//1.로그인여부체크 ->로그인페이지이동
String id = (String) session.getAttribute("id");
if (id == null) {
response.sendRedirect("loginForm.jsp");
}

//2. 한글처리 & 변수 : 전달된 정보를 저장(아이디,비번,이름,나이,성별,이멜)
request.setCharacterEncoding("UTF-8");
//String id = request.getParameter("id"); 세션으로 이미가져왔음
String pw = request.getParameter("pw");
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String email = request.getParameter("email");
String gender = request.getParameter("gender");

//3. 드라이버로드 & DB연결
final String DRIVER = "com.mysql.jdbc.Driver";
final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
final String DBID = "root";
final String DBPW = "1234";

Class.forName(DRIVER);
Connection con = DriverManager.getConnection(DBURL, DBID, DBPW);
System.out.println("updatePro : 드라이브로드와 디비연결성공");

//4. SQL구문 & pstmt실행 & 실행->rs저장
// 4-1 sql구문 : 수정하고자하는 사람의 정보가 있는지 판단 후 select
String sql = "select pw from itwill_member where id=?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);

//5. 데이터처리
// 아이디,비번 동일한 경우 => 수정
// 비밀번호오류 => 에러메세지

ResultSet rs = pstmt.executeQuery();

if(rs.next()){ //아이디있는 경우
if(pw.equals(rs.getString("pw"))){// 비밀번호 일치하는 경우
sql = "update itwill_member set name=?,age=?,gender=?,email=?"
+"where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setInt(2, age);
pstmt.setString(3, gender);
pstmt.setString(4, email);
pstmt.setString(5, id);
pstmt.executeUpdate();
System.out.println("회원정보수정완료");
response.sendRedirect("main.jsp");
}else{ // 비밀번호 불일치하는 경우
%>
<script type="text/javascript">
alert("비밀번호오류로 수정불가")
history.back(); //뒤로가기.
</script>
<%
System.out.println("비밀번호오류로 수정불가");
}
}else{ //아이디없는 경우
%>
<script type="text/javascript">
alert("비회원입니다")
history.back(); //뒤로가기.
</script>
<%
System.out.println("아이디오류");
}
%>