멋쟁이v의 개발일지

[JSP] select 쿼리 실행 결과 사용 및 응용(로그인처리) 본문

0년차/JAVA

[JSP] select 쿼리 실행 결과 사용 및 응용(로그인처리)

멋쟁이v 2023. 4. 23. 16:25
728x90
320x100

[목차]


01. select 쿼리 실행을 위한 객체 생성 및 실행

💡
ResultSet rs = null; rs = pstmt.executeQuery();

➡️ ResultSet 인터페이스 데이터 타입으로 rs 객체참조변수를 선언하고 null값으로 초기화 한다.

➡️ pstmt 객체참조변수에 할당된 주소를 찾아가서 메서드 영역 executeQuery() 메서드를 호출합니다.

  • pstmt 객체참조변수에 할당된 주소
    👉🏻
    1️⃣ preparedStatement 인터페이스로 부터 명령받은 com.mysql.cj.jdbc.result패키지내 ClientPreparedStatement 클래스 통해 생성된 객체의 주소

    2️⃣ preparedStatement 인터페이스로 부터 명령받은 ClientPreparedStatement 클래스 통해 생성된 객체의 주소

    3️⃣ preparedStatement 인터페이스 구현 객체 주소

➡️ 메서드를 호출하면 선언된 executeQuery 메서드 처리과정

  1. select 쿼리 실행 후 결과를 담고 응용 할 수 있는 ResultSet 구현객체를 생성한다.
    • ResultSet 객체 생성
      👉🏻
      1️⃣ ResultSet 인터페이스로 부터 명령받은 com.mysql.cj.jdbc.result패키지내 ResultSetImpl 클래스 통해 생성된 객체 주소

      2️⃣ ResultSet 인터페이스로 부터 명령받은 ResultSetImpl 클래스 통해 생성된 객체의 주소

      3️⃣ ResultSet 인터페이스 구현 객체 주소

  1. ResultSet 객체내에 쿼리 실행 결과를 담는다.
  1. ResultSet 구현객체 주소값을 메서드 호출한 곳으로 리턴한다.
  1. rs 객체참조변수에 주소값을 할당한다.

02. select 쿼리 실행결과 사용

💡
select 쿼리로 선택된 데이터를 화면에 출력할 수 있다.
  • [코드예제] if문
    // rs.next() <- 리턴타입이 boolean이다. (true, false)
    // 데이터베이스에 저장된 행이 있다면 true / 없다면 false
    
    if(rs.next()) {
    	System.out.println("1-1 아이디 일치");
    	if(pw.equals(dbpw)) {
    		System.out.println("2-1 로그인 성공");
    	} else {
    		System.out.println("2-2 비번 불일치");
    	}
    } else {
    	System.out.println("1-2 아이디 불일치");
    }

03. 로그인 처리(session 이용)

💡
1. JDBC 프로그램 실행 7단계

2. 로그인 성공 시 session 처리

👉🏻
차이점 ➡️ 쿼리 실행 준비 (insert, update, delete 와 다름) ➡️ 실행 결과 사용(select는 사용)
  • [코드예제] login_action.jsp
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!DOCTYPE html>
    <%@ 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" %>
    
    <%
    
    // ID, PW를 가져온다.
    request.setCharacterEncoding("euc-kr"); // post방식 한글처리
    String id = request.getParameter("id");
    String pw = request.getParameter("pw");
    System.out.println(id + "<-- id");
    System.out.println(pw + "<-- pw");
    
    // db에 있는 정보를 저장할 변수 선언
    String dbid = null;
    String dbpw = null;
    String dbname = null;
    String dblevel = null;
    
    String messeage = null;
    
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    
    // 1단계 : 드라이버 로딩
    Class.forName("com.mysql.jdbc.Driver");
    
    try {
    	
    	// 2단계 : DB연결
    	String jdbcDriver = "jdbc:mysql://localhost:3306/dbhooni?" + 
    				"useUnicode=true&characterEncoding=euckr";
    	String dbUser = "idhooni";
    	String dbPass = "pwhooni";
    	conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
    	
    	// 3단계 : 쿼리 실행을 위한 객체 생성
    	pstmt = conn.prepareStatement("SELECT * FROM tb_user WHERE u_id=?");
    	pstmt.setString(1, id);
    	
    	// 4단계 : 쿼리 실행
    	rs = pstmt.executeQuery();
    	
    	// 5단계 : 쿼리 실행 결과 사용
    	if(rs.next()) {
    		System.out.println("1-1 아이디 일치");
    		// db에 있는 컬럼을 조회해서 변수에 저장
    		dbid = rs.getString("u_id");
    		dbpw = rs.getString("u_pw");
    		dblevel = rs.getString("u_level");
    		dbname = rs.getString("u_name");
    		// 비밀번호 비교
    		if(pw.equals(dbpw)) {
    			System.out.println("2-1 로그인 성공");
    			// 아이디, 비번 일치시 세션 이용
    			session.setAttribute("S_ID", dbid);
    			session.setAttribute("S_NAME", dbname);
    			session.setAttribute("S_LEVEL", dblevel);
    			messeage = "로그인 성공";
    		} else {
    			System.out.println("2-2 비번 불일치");
    			messeage = "비밀번호 불일치";
    		}
    	} else {
    		System.out.println("1-2 아이디 불일치");
    		messeage = "아이디 불일치";
    	}
    	
    	
    } 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) {}
    }
    
    %>
    
    <script>
    	alert('<%= messeage %>');
    	location.href='<%= request.getContextPath() %>/index.jsp';
    </script>


tag : #login #session #select #jdbc #if #db


Uploaded by N2T

728x90
320x100
Comments