ITWILL학원 : 21강 JSP기초 BY 정규태강사 JDBC
JDBC활용 - import쓰는 이유, form페이지로 받은 데이터를 DB에 insert하는 방법
JDBC활용 - JAVA에서 DB 정보 지우기 2가지방법
JDBC활용 - DB에서 고객정보를 불러와서 HTML테이블에 담기
JDBC활용 - TIMESTAMP주의점, JDBC에서 데이터처리
JDBC활용 - 회원정보수정페이지만들기
JDBC활용 - 회원목록출력하는데 관리자는 빼고 출력하기, 자바 에러 두종류
사용자가 로그인한 뒤 자신의 정보를 수정할 수 있는 마이페이지를 만들어보자.
회원정보를 수정할 수 있는 전제는 로그인이다. 로그인이 되어있지않다면 로그인페이지로 이동시켜야한다. 로그인이 되어있는 사용자는 사용자정보를 DB에서 불러와서 화면에 각 요소를 출력한다 -> 원하는 정보를 수정한 뒤 다시 DB에 업데이트해야한다.
1. 회원정보수정폼 페이지만들기 로그인한 사용자에 한하여 DB에 저장되어있는 해당 회원정보를 FORM형식으로 나타내주는 updateForm.jsp
페이지를 만들어보자.
다음은 회원정보수정폼 작성 순서이다.
1-1. 로그인여부를 먼저 체크. & 한글처리 & 변수로딩
로그인이 되어있지않다면 로그인페이지로 이동
id값을 가져올 수 있는 방법이 여기서는 두가지이다,
기본 방식은 파라미터로 가져오거나 = request.getParameter(“id”)
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 <% request.setCharacterEncoding("UTF-8" ); String id = (String) session.getAttribute("id" ); if (id == null ){ response.sendRedirect("loginForm.jsp" ); } 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("드라이브로드와 디비연결성공" ); String sql = "select * from itwill_member where id=?" ; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1 , id); ResultSet rs = pstmt.executeQuery(); String name = "" ; int age = 0 ;String gender = "" ; String email = "" ; Timestamp reg_date = null ; if (rs.next()){ name = rs.getString("name" ); age = rs.getInt("age" ); gender = rs.getString("gender" ); email = rs.getString("email" ); reg_date = rs.getTimestamp("reg_date" ); } if (gender == null ){ gender="여" ; } %> <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값을 가져올 수 있는 방법이 여기서는 두가지이다,
기본 방식은 파라미터로 가져오거나 = request.getParameter(“id”)
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 <% String id = (String) session.getAttribute("id" ); if (id == null ) { response.sendRedirect("loginForm.jsp" ); } request.setCharacterEncoding("UTF-8" ); 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" ); 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 : 드라이브로드와 디비연결성공" ); String sql = "select pw from itwill_member where id=?" ; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1 , id); 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("아이디오류" ); } %>