본문 바로가기

Java

JDBC에서의 예외 처리

SQLException 다루기

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

 

 

주요 속성 및 메서드

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

 

SQL 작성

select * from user;

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

drop table user; 

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);
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; 
	}
} // end of class
728x90

'Java' 카테고리의 다른 글

JavaScript 게시판 만들기 - board-list 기능 만들기  (0) 2024.11.12
JDBC 성능 최적화  (2) 2024.06.18
JDBC 트랜잭션 관리와 배치 처리  (0) 2024.06.13
래퍼 클래스 ( Wrapper Class )  (0) 2024.06.12
JDBC 기본 사용법  (0) 2024.06.11