안루피취뽀일기

자바와 JDBC 연동 프로세스(1) 본문

JDBC

자바와 JDBC 연동 프로세스(1)

안루피 2023. 10. 23. 17:35
728x90
package com.kh.VODAO.user;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

public class UserMain {

	public static void main(String[] args) {
		UserMain um = new UserMain();
		um.selectScanner();
	}

	public boolean checkId(int userId) throws SQLException {
		//1.DB 연결
		String jdbcURL = "jdbc:oracle:thin:@localhost:1521:xe";
		String dbUserName = "khcafe";
		String dbPassWord = "KH1234";
	
		Connection cc = DriverManager.getConnection(jdbcURL, dbUserName, dbPassWord);
		
		//2.SQL
		String sql = "SELECT * FROM USERINFO WHERE user_id = ?";
		PreparedStatement ps = cc.prepareStatement(sql);
		ps.setInt(1, userId);
		
		//3.If활용해서 Result.next() 
		ResultSet rs = ps.executeQuery();
		if(rs.next()) {
			int id = rs.getInt(1);
			return id > 0; //0이상이면 true
		}
		return false; //일치하지 않을 때	
	}
	public boolean checkEmail(String userEmail) throws SQLException {
		//1.DB 연결
		String jdbcURL = "jdbc:oracle:thin:@localhost:1521:xe";
		String dbUserName = "khcafe";
		String dbPassWord = "KH1234";
	
		Connection cc = DriverManager.getConnection(jdbcURL, dbUserName, dbPassWord);
		
		//2.SQL
		String sql = "SELECT * FROM USERINFO WHERE email = ?";
		PreparedStatement ps = cc.prepareStatement(sql);
		ps.setString(1, userEmail);
		
		//3.If활용해서 Result.next() 
		ResultSet rs = ps.executeQuery();
		if(rs.next()) {
			int id = rs.getInt(1);
			return id > 0; //0이상이면 true
		}
		return false; //일치하지 않을 때	
	}
	
	public void selectScanner() {
		//1. DB 연결 URL, USERNAME, PASSWORD
		String jdbcURL = "jdbc:oracle:thin:@localhost:1521:xe";
		String dbUserName = "khcafe";
		String dbPassWord = "KH1234";
		
		try {
		Connection cc = DriverManager.getConnection(jdbcURL, dbUserName, dbPassWord);
		Scanner sc = new Scanner(System.in);
		
		while(true) {
			System.out.println("User ID 입력해주세요.");
			System.out.println("종료하고싶다면 특수문자 제외 [e] 입력");
			String input = sc.nextLine();
			
			//만약에 e를 입력했다면
			//if("e"==input || "E" == input) {
			if("e".equalsIgnoreCase(input)) {
				System.out.println("종료하겠습니다.");
				break; 
				//break가 없으면 종료되지 않음 종료하겠습니다 만 출력됨
			}
			
			int userId = Integer.parseInt(input);
			System.out.println("이메일을 입력 : ");
			String email = sc.nextLine();
			//select 문 출력하기 
			
			String sql = "SELECT * FROM USERINFO WHERE user_id = ? AND email = ?";
			PreparedStatement st = cc.prepareStatement(sql);
			st.setInt(1, userId);
			st.setString(2, email);
			ResultSet rs = st.executeQuery();
			
			//selectOne if
			if(rs.next()) {
				System.out.println("user ID : " + rs.getInt("user_id"));
				System.out.println("userName : " + rs.getString("user_name"));
				System.out.println("Email : " + rs.getString("email"));
				System.out.println("Registration Date : " + rs.getString("seg_date"));
				System.out.println();
				
			} else {
				boolean idTrue = checkId(userId);
				boolean emailTrue = checkEmail(email);
					if(!idTrue && emailTrue) {
						System.out.println("일치하지 않는 User ID 입니다.");
						System.out.println();
					} else if(idTrue && !emailTrue) {
						System.out.println("일치하지 않는 User Email 입니다.");
						System.out.println();
					} else {
						System.out.println("일치하는 User ID와 Email을 찾을 수가 없습니다.");
						System.out.println();
					}
				System.out.println("User를 찾을 수 없습니다.");
				
			}
			
			
		}
		
		
		
		
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

코드 풀이

 

checkId() - 아이디가 일치하는지 확인하는 메서드

1. 드라이브 로딩 

String jdbcURL = "jdbc:oracle:thin:@localhost:1521:xe";
String dbUserName = "khcafe";
String dbPassWord = "KH1234";

 

=> 상기 3가지 내용만 바꾸면 어느 DB에서든 활용 가능하다.

 

2. 객체 생성 

Connection cc = DriverManager.getConnection(jdbcURL, dbUserName, dbPassWord);

 

=> Connection이란 무엇인지 궁금해할 순 있지만 그것은 "캡슐"을 까서 까서 약재 가루를 한알 한알 분석하려고 드는 꼴이라고 하니 그냥 느낌만 알고 넘어가기로 하자..

쨌든  Connection 객체를 연결한다.

 

3. sql 준비

String sql = "SELECT * FROM USERINFO WHERE user_id = ?";

 


PreparedStatement ps = cc.prepareStatement(sql);

 

=> sql문을 전송하는 객체인 PreparedStatement 


ps.setInt(1, userId);

 

=>  몇번째 물음표에 어떤 값을 넣을 것인지 쓰는 것이다.

따라서 위 문장은 첫번째 물음표에 userId를 넣는다는 뜻 

 

ResultSet rs = ps.executeQuery();
if(rs.next()) {
int id = rs.getInt(1);
return id > 0; //0 이상이면 true
}
return false; //일치하지 않을 때

 

=> ResultSet : SELECT의 결과를 저장하는 객체

ResultSet 객체를 이용해, SELECT문의 결과를 순회하여 원하는 값만 뽑아오거나 출력할 수 있다.

 

checkEmail() 메서드도 위와 같은 원리이다.

 

selectScanner()

DB 연결 URL, USERNAME, PASSWORD
String jdbcURL = "jdbc:oracle:thin:@localhost:1521:xe";
String dbUserName = "khcafe";
String dbPassWord = "KH1234";

 

코드의 잠재적인 예외(데이터베이스 연결 오류와 같은)를 처리하기 위해 try-catch 블록이용
try {

지정된 JDBC URL, 사용자 이름 및 비밀번호를 사용하여 데이터베이스에 연결
Connection cc = DriverManager.getConnection(jdbcURL, dbUserName, dbPassWord);

콘솔에서 사용자 입력을 읽기 위해 `Scanner` 객체를 생성
Scanner sc = new Scanner(System.in);

 

사용자 입력 루프: while문을 이용해 사용자에게 사용자 ID와 이메일을 입력하도록 요청하는 루프로 만든다.

사용자가 'e'를 입력하면(대소문자 구분 없음), 프로그램은 메시지를 출력하고 루프를 종료.

유효한 사용자 ID가 입력된 경우 루프는 계속됨.


while(true) {
System.out.println("User ID 입력해주세요.");
System.out.println("종료하고싶다면 특수문자 제외 [e] 입력");
String input = sc.nextLine();

만약에 e를 입력했다면
//if("e"==input || "E" == input) {
if("e".equalsIgnoreCase(input)) {
System.out.println("종료하겠습니다.");
break;

break가 없으면 종료되지 않음 종료하겠습니다 만 출력됨
}

int userId = Integer.parseInt(input);
System.out.println("이메일을 입력 : ");
String email = sc.nextLine();

 

select 문 출력하기 

"USERINFO" 테이블에서 제공된 사용자 ID와 이메일을 기반으로 사용자 정보를 선택하기 위한 SQL 쿼리를 준비
String sql = "SELECT * FROM USERINFO WHERE user_id = ? AND email = ?";
PreparedStatement st = cc.prepareStatement(sql);
st.setInt(1, userId);
st.setString(2, email);

쿼리를 실행하고 결과 집합을 얻음
ResultSet rs = st.executeQuery();

//selectOne if
if(rs.next()) {
System.out.println("user ID : " + rs.getInt("user_id"));
System.out.println("userName : " + rs.getString("user_name"));
System.out.println("Email : " + rs.getString("email"));
System.out.println("Registration Date : " + rs.getString("seg_date"));
System.out.println();

} else {

여기서 아까 만든 메서드 checkId()와 checkEmail()를 사용
boolean idTrue = checkId(userId);
boolean emailTrue = checkEmail(email);

 

결과 집합에서 결과를 찾으면(사용자 ID와 이메일이 일치하는 경우), 사용자 정보를 출력.

결과를 찾지 못한 경우, 사용자 ID, 이메일 또는 둘 다 일치하지 않는 경우에 따라 적절한 메시지를 출력.


if(!idTrue && emailTrue) {
System.out.println("일치하지 않는 User ID 입니다.");
System.out.println();
} else if(idTrue && !emailTrue) {
System.out.println("일치하지 않는 User Email 입니다.");
System.out.println();
} else {
System.out.println("일치하는 User ID와 Email을 찾을 수가 없습니다.");
System.out.println();
}
System.out.println("User를 찾을 수 없습니다.");
}
}

} catch (Exception e) {
e.printStackTrace();
}
}

728x90