JDBC(Java Database Connectivity)란?
JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 연결하고 데이터를 처리하기 위한 API입니다. 이를 사용하여 다양한 데이터베이스 시스템과 연동할 수 있으며, 데이터 조회, 삽입, 수정, 삭제와 같은 작업을 손쉽게 처리할 수 있습니다.
이번 포스트에서는 JDBC를 사용하여 Oracle 데이터베이스와 연동하여 회원 정보를 관리하는 방법을 살펴보겠습니다. 아래 예제는 회원 정보를 등록, 수정, 삭제하는 기본적인 기능을 구현합니다.
프로젝트 준비
- Oracle 데이터베이스 설정
먼저, 데이터베이스에 접속하기 위한 Oracle DB를 설치하고, 접속할 수 있는 HR 계정을 활성화합니다. 아래는 데이터베이스 접속 정보를 예시로 사용하였습니다.- 데이터베이스 접속 URL:
jdbc:oracle:thin:@localhost:1521:xe
- 사용자 계정:
HR
- 비밀번호:
HR
- 데이터베이스 접속 URL:
- JDBC 라이브러리 추가
JDBC를 사용하려면 해당 라이브러리가 필요합니다. Oracle의 JDBC 드라이버는ojdbc11.jar
파일로 제공됩니다. 프로젝트의lib
폴더에 추가한 후, Build Path에서 라이브러리를 연결합니다. - 모듈 설정
자바 11 이상 버전에서는 모듈 시스템을 사용하기 때문에module-info.java
파일에java.sql
모듈을 추가해야 합니다. module your.module.name { requires java.sql; }
1. 회원 정보 등록 (INSERT)
회원 정보를 입력받아 데이터베이스에 등록하는 코드입니다. 기본적으로 아이디, 비밀번호, 나이, 이메일 정보를 입력받아 INSERT INTO
구문을 사용하여 데이터베이스에 저장합니다.
코드 설명
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class JDBCInsert {
public static void main(String[] args) {
// 1. 데이터베이스 접속 정보 설정
String url = "jdbc:oracle:thin:@localhost:1521:xe"; // 접속 주소
String uid = "HR"; // 사용자 계정
String upw = "HR"; // 비밀번호
// 2. 사용자 입력
Scanner scan = new Scanner(System.in);
System.out.println("아이디>");
String id = scan.next();
System.out.println("비밀번호>");
String pw = scan.next();
System.out.println("나이>");
int age = scan.nextInt();
System.out.println("이메일>");
String email = scan.next();
// 3. 실행할 SQL 구문 준비
String sql = "INSERT INTO MEMBER(ID,PW,AGE,EMAIL) VALUES(?, ?, ?, ?)";
// 4. JDBC 객체 선언
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 5. JDBC 드라이버 호출 및 연결
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection(url, uid, upw);
// 6. PreparedStatement 생성 및 SQL에 매개변수 바인딩
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id); // 첫 번째 ?에 id 값을 바인딩
pstmt.setString(2, pw); // 두 번째 ?에 pw 값을 바인딩
pstmt.setInt(3, age); // 세 번째 ?에 age 값을 바인딩
pstmt.setString(4, email); // 네 번째 ?에 email 값을 바인딩
// 7. SQL 실행
int result = pstmt.executeUpdate(); // 실행된 SQL의 결과 행 수 반환
// 8. 결과 처리
if (result == 1) {
System.out.println("인서트 성공");
} else {
System.out.println("인서트 실패");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 9. 자원 해제
if (conn != null) conn.close();
if (pstmt != null) pstmt.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
주요 포인트
- PreparedStatement를 사용하여 SQL 문에서
?
로 표시된 자리에 값을 바인딩합니다. - 입력받은 데이터를 기반으로
INSERT INTO
SQL 구문이 실행되며, 반환값인result
가 1이면 성공적으로 행이 추가된 것을 의미합니다. - 예외가 발생할 경우
catch
블록에서 처리하며, 실행이 끝나면 반드시 연결 객체를 닫아줍니다.
2. 회원 정보 수정 (UPDATE)
회원 정보를 수정하는 코드는 기존 회원 정보 중 아이디를 기준으로 비밀번호, 나이, 이메일을 업데이트합니다.
코드 설명
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class JDBCUpdate {
public static void main(String[] args) {
// 1. 데이터베이스 접속 정보 설정
String url = "jdbc:oracle:thin:@localhost:1521:xe"; // 접속 주소
String uid = "HR"; // 사용자 계정
String upw = "HR"; // 비밀번호
// 2. 사용자 입력
Scanner scan = new Scanner(System.in);
System.out.println("아이디>");
String id = scan.next();
System.out.println("비밀번호>");
String pw = scan.next();
System.out.println("나이>");
int age = scan.nextInt();
System.out.println("이메일>");
String email = scan.next();
// 3. 실행할 SQL 구문 준비
String sql = "UPDATE MEMBER SET AGE = ?, PW = ?, EMAIL = ? WHERE ID = ?";
// 4. JDBC 객체 선언
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 5. JDBC 드라이버 호출 및 연결
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection(url, uid, upw);
// 6. PreparedStatement 생성 및 SQL에 매개변수 바인딩
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, age);
pstmt.setString(2, pw);
pstmt.setString(3, email);
pstmt.setString(4, id);
// 7. SQL 실행
int result = pstmt.executeUpdate();
// 8. 결과 처리
if (result == 1) {
System.out.println("업데이트 성공");
} else {
System.out.println("업데이트 실패");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 9. 자원 해제
if (conn != null) conn.close();
if (pstmt != null) pstmt.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
주요 포인트
- UPDATE SQL 구문을 사용하여 특정 아이디를 기준으로 정보를 수정합니다.
- 아이디는 수정하지 않으며, 나이, 비밀번호, 이메일만 수정됩니다.
3. 회원 정보 삭제 (DELETE)
회원 정보를 삭제하는 코드는 입력받은 아이디와 비밀번호를 기준으로 회원 정보를 삭제합니다. 조건에 맞는 회원만 삭제됩니다.
코드 설명
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class JDBCDelete {
public static void main(String[] args) {
// 1. 데이터베이스 접속 정보 설정
String url = "jdbc:oracle:thin:@localhost:1521:xe"; // 접속 주소
String uid = "HR"; // 사용자 계정
String upw = "HR"; // 비밀번호
// 2. 사용자 입력
Scanner scan = new Scanner(System.in);
System.out.println("아이디>");
String id = scan.next();
System.out.println("비밀번호>");
String pw = scan.next();
// 3. 실행할 SQL 구문 준비
String sql = "DELETE FROM MEMBER WHERE ID = ? AND PW = ?";
// 4. JDBC 객체 선언
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 5. JDBC 드라이버 호출 및 연결
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection(url, uid, upw);
// 6. PreparedStatement 생성 및 SQL에 매개변수 바인딩
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, pw);
// 7. SQL 실행
int result = pstmt.executeUpdate();
// 8. 결과 처리
if (result == 1) {
System.out.println("삭제 성공");
} else {
System.out.println("삭제 실패");
}
} catch (Exception
e) {
e.printStackTrace();
} finally {
try {
// 9. 자원 해제
if (conn != null) conn.close();
if (pstmt != null) pstmt.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
주요 포인트
- DELETE SQL 구문을 사용하여 특정 아이디와 비밀번호가 일치하는 회원을 삭제합니다.
- 아이디와 비밀번호를 동시에 일치시켜 삭제하는 조건을 설정함으로써 보안을 강화할 수 있습니다.
위 예제 코드를 통해 JDBC를 사용한 Oracle 데이터베이스와의 연동 방법을 살펴보았습니다. 데이터베이스에 연결하고, INSERT, UPDATE, DELETE와 같은 작업을 처리할 때, PreparedStatement
를 사용하여 SQL 쿼리를 실행하고, 보안을 강화할 수 있는 방법을 적용했습니다.
실제 운영 환경에서는 예외 처리와 트랜잭션 처리 등을 추가로 적용해 안전하게 데이터를 관리하는 것이 중요합니다. JDBC는 다양한 데이터베이스와 연동이 가능하니, 다른 데이터베이스 시스템에서도 응용해볼 수 있습니다.
'🗄️ Backend > SQL' 카테고리의 다른 글
SQL 서브쿼리 (Subquery)와 데이터 조작 명령어 (DML) 정리 (4) | 2024.10.14 |
---|---|
그룹 함수 및 조인 함수 구문 (0) | 2024.10.11 |
숫자 함수 및 SQL 함수 정리 (3) | 2024.10.11 |
SQL SELECT 구문 및 DCL 권한 관리 (0) | 2024.10.11 |
RDBMS (관계형 데이터베이스 관리 시스템)의 이해: 개념과 SQL 기본 구문 (0) | 2024.10.11 |