JDBC가입,로그인 같이 하기★★(pstmt이용)

밍숫가루·2024년 3월 27일

JDBC

목록 보기
1/1

★pstmt를 쓰는 이유 파라미터를 받는 이유!

pstmt

prepareStatement() 메서드는 Connection 인터페이스의 메서드.
JDBC에서는 데이터베이스에 연결할 때
Connection 객체를 사용하고, 이를 통해 SQL 문을 실행할 준비된(prepared) 문을 생성할 수 있다.

회원가입

로그인

package member;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import main.Main;

public class MemberController {

	public void printMenu() throws Exception {
		
		System.out.println("---------------MEMBER----------");
		System.out.println("1.회원가입");
		System.out.println("2.로그인");

		System.out.print("번호를 입력하세요: ");
		String input = Main.SC.nextLine();

		switch (input) {
		case "1":
			join();
			break;
		case "2":
			login();
			break;
		default:
			System.out.println("잘못 입력하셨습니다");
		}
		
	}//printMenu method

	// 외부에서 로그인,가입 호출하지 않도록 ! private로 설정.메뉴를 보여주고 그다음에 가입,로그인하도록함.

	private void join() throws Exception {
			System.out.println("--------------회원가입----------");

			Connection conn = getConn();

			// SQL 준비 PSTMT를 쓸거니까 ?로 두기.
			String sql = "INSERT INTO MEMBER(ID,PWD,NICK) VALUES(?,?,?)";

			// 입력받기.
			System.out.println("ID를 입력하세요 ");
			String inputId = Main.SC.nextLine();
			System.out.println("PWD를 입력하세요 ");
			String inputPwd = Main.SC.nextLine();
			System.out.println("닉네임을 입력하세요 ");
			String inputNick = Main.SC.nextLine();
	
			// SQL 실행을 위한 statement 준비
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, inputId);
			pstmt.setString(2, inputPwd);
			pstmt.setString(3, inputNick);
	
			// statement 에 SQL 담아주고 실행 및 결과 리턴받기
			int result = pstmt.executeUpdate();
			System.out.println("쿼리 실행 결과 :" + result);

			// 결과 출력
			if (result != 1) {
			// 생성자의 인자값으로 문자를 넘겨주면 예외메시지로 넘어간다. 출력문없이 에러 메세지확인 가능.
			throw new RuntimeException("회원가입 실패!");
			}

			System.out.println("회원가입 성공");

	}

	private void login() throws Exception {

			Connection conn = getConn();
			
			// SQL 준비
			
			String sql = "SELECT* FROM MEMBER WHERE ID= ? AND PWD= ?";
	
			System.out.println("ID를 입력하세요 ");
			String id = Main.SC.nextLine();
			System.out.println("PWD를 입력하세요 ");
			String pwd = Main.SC.nextLine();
	
			// SQL 실행을 위한 statement 준비
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			pstmt.setString(2, pwd);
	
			// statement 에 SQL 담아주고 실행 및 결과 리턴받기
			ResultSet rs = pstmt.executeQuery();
			
			// 결과 출력
			if (rs.next()) {
				String dbId = rs.getString("ID");
				String dbPwd = rs.getString("PWD");
				String dbNick = rs.getString("NICK");
	
				MemberVo vo = new MemberVo(dbId, dbPwd, dbNick);
				System.out.println(vo.getNick() + "님 환영합니다~");
				} else {
					throw new RuntimeException("로그인실패...");
				}

	}//login() 

	private Connection getConn() throws Exception {
			// JDBC 드라이버 로딩
			String driver = "oracle.jdbc.driver.OracleDriver";
			Class.forName(driver);
	
			// 데이터베이스 연결 정보 준비
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String id = "C##KH";
			String pwd = "1234";
	
			// 데이터베이스 연결 == 커넥션 객체 얻기
			Connection conn = DriverManager.getConnection(url, id, pwd);
	
			return conn;
		}

}

---------------데이터를 뭉치기 위해
MEMBER VO를 만듬

package member;

public class MemberVo {

		// 멤버테이블의 데이터를 채우기 위함. 아이디,비번,닉네임
		private String id;
		private String pwd;
		private String nick;

		public MemberVo() {
			super();
		}

	public MemberVo(String id, String pwd, String nick) {
		super();
		this.id = id;
		this.pwd = pwd;
		this.nick = nick;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public String getNick() {
		return nick;
	}

	public void setNick(String nick) {
		this.nick = nick;
	}

	@Override
	public String toString() {
		return "MemberVo [id=" + id + ", pwd=" + pwd + ", nick=" + nick + "]";
	}

}


----------메인에서
mc.printMenu();를 실행하기 위함(예외처리함)

package main;

import java.util.Scanner;

import member.MemberController;

public class Main {
	
	public static final Scanner SC=new Scanner(System.in);

	public static void main(String[] args) {
		System.out.println("============JDBC(MEMBER)==========");
		MemberController mc= new MemberController();
		
			try {
				
				mc.printMenu();
				}
			catch(Exception e){
				System.out.println(e.getMessage());
				e.printStackTrace();
				}

		}

}
profile
수인이야 ♡

1개의 댓글

comment-user-thumbnail
2024년 3월 30일

!? 아 그래서 pstmt를 쓰는군요
뭔지 모르고 그냥 계속 외워서 사용했었는데
이제부터 알고 사용할 수 있겠네요!
좋은 정보 감사합니다!

답글 달기