JDBC -pstmt이용한 로그인(SELECT)

밍숫가루·2024년 3월 27일

createStatement()와 prepareStatement()는 JDBC(Java Database Connectivity)에서 SQL 문을 실행하는 데 사용되는 두 가지 메서드다

PrepareStatement()이용하기

이전은
createStatement()를 이용했었는데 prepareStatement()를 사용하여 로그인을 해보자

createStatement()를 이용할 경우

파라미터화된(prepared) 문을 사용하지 않기 때문에 동일한 쿼리를 여러 번 실행할 경우 성능이 저하될 수 있다.
매번 새로운 쿼리를 실행하므로 데이터베이스가 매번 새로운 쿼리를 컴파일해야 한다.

PrepareStatement() 사용해야 하는 이유

데이터베이스에 대한 SQL 쿼리를 실행하기 전에 준비된(prepared) 상태로 만들어주는 역할을 한다.
일반적으로 SQL 쿼리에는 사용자가 제공한 데이터(예: 사용자 입력)를 포함해야 하는 경우가 많습니다. 이러한 경우에는 보안 및 성능상의 이유로 사용자가 입력한 데이터를 직접 SQL 쿼리에 삽입하는 것보다는 파라미터화된(prepared) 문을 사용하는 것이 좋습니다.

package main;

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

public class LoginMain {

	public static void main(String[] args) throws Exception {
		System.out.println("==========JDBC(pstmt)로그인");
		// 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);

		// 유저 입력받기
		Scanner sc = new Scanner(System.in);
		System.out.print("아이디: ");
		String inputId = sc.nextLine();
		System.out.print("비번: ");
		String inputPwd = sc.nextLine();

		// SQL 준비
		String sql = "SELECT* FROM MEMBER WHERE ID= ? AND PWD= ?";

		// SQL 실행을 위한 statement 준비 및 쿼리 완성(==물음표 채우기)
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, inputId);
		pstmt.setString(2, inputPwd);

		// statement 에 SQL 담아주고 실행 및 결과 리턴받기
		ResultSet rs = pstmt.executeQuery();

		// 결과 출력
		while (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);
		}

		// 사용한 자원 반납
		// ~~~~~
	}

}
profile
수인이야 ♡

0개의 댓글