앞에서 만드거에 이어서 jdbc를 이용하여 완성시키는 문제
우선 sql문 작성
id pw nickname 순서 기억!
model1 - view와 controller 모두 jsp에서 작성
model2 - JSP 표현식만 사용
Join HTML 파일 코드 작성
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- form태그 이용해서 id, pw , name -->
<fieldset align ="center">
<legend>회원가입</legend>
<form action="ex15joinProgram.jsp" method="post"> <!--get방식은 url에 정보노출 -->
ID: <input type ="text" name="id"><br>
PW: <input type ="password" name="pw"><br>
Name: <input type ="text" name="name"><br>
<input type= "submit" value="회원가입">
</form>
</fieldset>
</body>
</html>
form action="joinProgram.jsp" 로 !!
DB에서 필요한
joinProgram.jsp 파일 코드
길어서 나눠서 설명
-method = post 방식으로 받았기 때문에 제일 먼저 인코딩부터 해줘야함!!!
-그리고 파라미터로 값들을 받아온다.
-DB접근위해 URL, dbid , dbpw 값 입력해야하는데
여기서 url 값은 아래 사진대로 찾아가보시면 나옵니다!
-?는 아까 위에 sql문에 id, pw, nickname 위한 변수
-Update : select구문을 제외한 다른 구문, int형 반환
-Query : select구문에서 사용, Resultset형태로 반환
-DB문은 꼭 닫아주어야 한다 !!!!!!!
-순서는 역순!!!!! 중요합니다~!!
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.net.ConnectException"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//0. 인코딩
request.setCharacterEncoding("UTF-8");
// 1. id, pw, name 파라미터 받아오기
// Ctrl + D :해당 줄 삭제
// Ctrl + Alt + 방향키 : 해당 방향으로 복사
// Alt + 방향키 : 해당 방향으로 줄 이동
// 블록 : shift + home
String id=request.getParameter("id");
String pw=request.getParameter("pw");
String name=request.getParameter("name");
// 2. DB연결을 위해서 사용할 Class찾기
Class.forName("oracle.jdbc.driver.OracleDriver");
// 3 . DB에 접근하기 위해 url, dbid, dbpw 변수에 넣기
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String dbid = "hr";
String dbpw = "hr";
// 4. DB연결 - Connection 객체 반환
Connection conn = DriverManager.getConnection(url,dbid,dbpw);
// 5. SQL문 작성
String sql = "insert into jdbc_member values(?, ?, ?)"; //"?"하면 안됨 문자열이 되니깐 오류꼭보셈(오류:부적합한 열 인덱스)
// 6. preparestatement 메소드 사용해 spl문을 DB에 전달
PreparedStatement psmt =conn.prepareStatement(sql);
// 7. ?에 값 넣기
psmt.setString(1, id);
psmt.setString(2, pw);
psmt.setString(3, name);
// 8. 실행
// Update : select구문을 제외한 다른 구문, int형태로 반환
// Query : select 구문에서 사용, Resultset형태로 반환
int cnt = psmt.executeUpdate();
// 9. DB문 닫아주기
psmt.close();
conn.close();
// 10. 결과값에 따라서 다른 페이지로 이동
// 성공했을 때 : ex14login.html 0보다 크면 어떤행에 변화가 생김
String moveURL = null;
if(cnt>0){
System.out.println("회원가입 성공");
moveURL = "ex14login.html";
}
// 실패했을 때 : ex15join.html
else{
System.out.println("회원가입 실패");
moveURL = "ex15join.html";
}
response.sendRedirect(moveURL);
%>
</body>
</html>
우선 DAO와 VO 만들기전 기본 개념부터 알고 가자 !!
먼저 MemberVO 작성
package Model;
public class MemberVO {
// field 변수명이 table의 컬럼이름과 같아야한다.
private String id;
private String pw;
private String nickname;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
//생성자 만드는 단축기 alt shift s
public MemberVO(String id, String pw, String nickname) {
super();
this.id = id;
this.pw = pw;
this.nickname = nickname;
}
}
VO클래스는 sql에서 작성한 DB테이블 컬럼명과 동일한 Member변수를 갖는다
getter와 setter를 만들어서 변수에 접근
단축키 alt + shift + s를 눌러서 (단축기 잘 까먹음)
Getters and Setters 눌러서 만들어준다!!!
DAO 생성!!!!!!!!
package Model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DAO {
//login(바인드 변수에 넣어줄걸 넣어줌)
public MemberVO login(String id, String pw) {
MemberVO vo = null; // 지역변수라서 선언 해줘야 젤 밑에return 오류 안남
//로그인 성공 여부 판단
try{
//1. jar파일 집어놓고, Class 동적로딩
Class.forName("oracle.jdbc.driver.OracleDriver"); //통로 Class : OracleDriver
//2. Connection 객체 생성 java.sql로 자동완성
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String dbid = "hr";
String dbpw = "hr";
Connection conn = DriverManager.getConnection(url, dbid, dbpw);//db연결
//3. sql문 작성
String sql = "select*from jdbc_member where id = ? and pw = ?";
//4. 실행 준비
PreparedStatement psmt =conn.prepareStatement(sql);
//5. ?(바인드변수) 채우기
psmt.setString(1, id);
psmt.setString(2, pw);
//6. 실행
// insert, update, delete : excuteUpdate()--> int 리턴 (db에 얼만큼 몇개의 행이 변화 하였는가)
// select : executeQuery()--> ResultSet 리턴
ResultSet rs=psmt.executeQuery();
// 7. 성공여부 판단
// rs.next(); --> 커서를 한칸 내리고 값이 있는지 없는지를 리턴
// rs.next(); == true : 해당하는 값이 있다.
// rs.next(); == false : 해당하는 값이 없다.
String nickname =null; // 전역변수로 선언
if(rs.next()){
//ResultSet(rs)객체에서 column명이 nickname 값을 가지고 와서 nickname이라는 변수에 담아두기
//rs.getString("컬럼명");
//rs.getString(컬럼의 인덱스번호);
//select*from jdbc_member;
String uid =rs.getString(1);
String upw =rs.getString("pw");
nickname =rs.getString("nickname");// nick name변수에 재할당
// 결과를 MemberVO로 묶어주기
vo = new MemberVO(uid, upw, nickname);
}
//8. DB 문 닫아주기 (역순으로 닫는다)
rs.close();
psmt.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
return vo; //MemberVO 지역변수 잘봐 오류나면
}
// 로그인=======
}
'JSP,Servlet' 카테고리의 다른 글
JSP - Session객체 생성/가져오기/ 삭제 (0) | 2022.01.08 |
---|---|
JSP - Cookie객체 생성/가져오기/ 삭제 / 개념 (0) | 2022.01.08 |
JSP - 회원가입/로그인 만들기 실습 (0) | 2022.01.05 |
JSP - sendRedirect 개념/실습문제 네이버로 이동 (0) | 2022.01.05 |
JSP-선언문(Declaration )/지시자(Directive) 개념,실습문제 (0) | 2022.01.05 |