JDBC에서의 예외 처리 - 9

1. SQLException 다루기

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

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

SQL 작성

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

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

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

-- 이메일에다가 unique 제약을 추가해보자.
alter table users add CONSTRAINT unique_email unique(email);

select * from users;

insert into users(username, password, email)
values	('홍길동', 'asd123', 'a@naver.com'),
        ('이순신', 'asd123', 'b@naver.com'),
        ('박태환', 'asd123', 'c@naver.com');
package com.tenco.quiz.ver4;

public class LoginExample {

	// 개발 테스트를 위한 로깅 처리 및 로그
	private static final Logger LOGGER = Logger.getLogger(LoginExample.class.getName()); // com.tenco.quiz.ver4.LoginExample

	public static void main(String[] args) {
		// DataSource를 활용한 Connection 객체를 사용하자.
		
		try (
				// HikariCP가 담김
				Connection conn = DBConnectionManger.getConnection();
				// username, password를 받아서 확인해야 한다.
				Scanner sc = new Scanner(System.in)){
			
			System.out.print("username을 입력하세요 : ");
			String username = sc.nextLine();
			
			System.out.print("password를 입력하세요 : ");
			String password = sc.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;
	}

	
} // end of class

자료 구조(Data Structure) - 4으로 돌아가기

 

'Java > 자료구조' 카테고리의 다른 글

자료 구조(Data Structure)  (0) 2024.06.17
JDBC 실습 예제 - 10  (0) 2024.06.17
JDBC 성능 최적화 - 8  (0) 2024.06.17
JDBC를 활용한 CRUD 와 SOLID 원칙 - 7  (1) 2024.06.14
JDBC 트랜잭션 관리와 배치 처리 - 6  (0) 2024.06.12