일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 컬렉션 프레임워크
- Map 인터페이스
- GitHub
- 깃허브
- Eclipse
- 클래스
- html
- 인터페이스
- Method
- 이클립스
- Class
- 싱글톤 패턴
- 자바
- 오류
- singlrton pattern
- 해결
- 버전관리
- Collection Framework
- Git
- java
- 깃
- 패키지
- 메서드
- CSS
- 이클립스 설치
- Collection 인터페이스
- Today
- Total
안루피취뽀일기
자바와 JDBC 연동 프로세스(1) 본문
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();
}
}