JSP

JDBC 예외 처리

DDG9 2024. 7. 1. 17:33

SQLException 다루기

SQLException은 JDBC에서 발생할 수 있는 일반적인 예외입니다. 이 예외는 데이터베이스와의 통신 중에 발생하는 오류를 나타냅니다. SQLException은 다양한 속성과 메서드를 제공하여 예외에 대한 상세한 정보를 제공합니다.

  • 주요 속성 및 메서드:
    • getErrorCode(): 데이터베이스 벤더가 제공하는 특정 오류 코드를 반환합니다.
    • getSQLState(): SQLState 코드를 반환합니다. 이 코드는 표준 SQL 상태 코드를 나타냅니다.
    • getMessage(): 예외 메시지를 반환합니다.
    • getNextException(): 체인된 예외를 반환합니다.

SQL 작성

select * from user;

-- DML DCL DDL
-- 컬럼 추가하는 쿼리를 만들어 보자.

create table users(
	id int auto_increment primary key,
    username varchar(100) not null unique,
    password varchar(100) not null
);

alter table users add column email varchar(100) null;

-- 이메일에다가 unique 제약을 추가해보자. 
alter table users add constraint unique_email unique(email);
package com.tenco.quiz.ver4;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

public class LoginExample {
	
	// 개발 테스트를 위한 로깅 처리 및 로그 
	private static final Logger LOGGER = Logger.getLogger(LoginExample.class.getName());
	
	public static void main(String[] args) {
		// DataSource 를 활용한 Connection 객체를 사용하자. 
		try {
			// HikariCP 가 담김 
			Connection conn = DBConnectionManager.getConnection();
            
			// username, password를 받아서 확인 해야 한다. 
			Scanner scanner = new Scanner(System.in);
            
			System.out.print("username 을 입력하세요 : ");
			String username = scanner.nextLine();
			
			System.out.print("password 을 입력하세요 : ");
			String password = scanner.nextLine();
			
			if(authenticateUser(conn, username, password)) {
				System.out.println("로그인 성공 ! ");
			}  else {
				System.out.println("로그인 실패 - username 과 password 를 확인해주세요 ");
			}
		} catch (SQLException e) {
			LOGGER.log(Level.INFO, "MySQl 연결 오류");
			e.printStackTrace();
		}
	}
	
	private static boolean authenticateUser(Connection conn, String username, String password) {
		String query = " select * from users where username = ? and password = ? ";
		boolean result = false; 
		try {
			PreparedStatement pstmt = conn.prepareStatement(query);
			pstmt.setString(1, username);
			pstmt.setString(2, password);
			ResultSet rs = pstmt.executeQuery();
			result = rs.next();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result; 
	}
}