[Java] 순수 자바 + 순수 JDBC 이용한 CRUD 프로젝트
지금까지 spring 또는 springboot 와 같은 프레임워크 위에서 개발을 하다보니
당연하게 여겨지던것들이 프레임워크 없이 개발을 하려다 보니
이게 왜 필요했는지 없다면 어떻게 해야하고 있다면 어디부분이였는지 와 같은
보이지 않았던 것들이 보이는 기회를 얻는 시간이였고
완성한 내용을 시각적인 자료로 남기고자 글을 적는다
1. 사용한 버전 및 환경
- Java 11
- Oracle 19c
- ojdbc8
- gradle
- intelliJ
2. 사용한 인터페이스 및 클래스 및 메서드
- Interface Connection
특정 DB의 연결 세션 이다
- Interface PreparedStatement
SQL문을 대신 실행시켜주는 기능을 한다
- Interface DriverManger
JDBC drivers 모움을 관리하기 위한 서비스이다
- Class ResultSet
DB 결과 정보를 담아두는 역할을 한다
- Class Member
유저 정보가 담긴 클래스이다
- Class Main
동작시킬 메인 클래스이다
- Method prepareStatement()
db 접속 정보에 sql문을 담아 동작 준비를 해준다
- Method executeQuery()
select 작업을 할때 사용한다, select 된 정보를 리턴 해준다
- Method executeUpdate()
insert, update, delete 작업을 할때 사용한다
이때 실행하여 업데이트된 행의 갯수를 int 로 리턴 해준다
- Method next()
cursor 밑에 row의 존재 유무를 확인해준다
존재하면 true, 존재하지 않으면 false를 리턴한다
- Method selectAll()
모든 유저 정보를 반환해 준다
- Method insert()
유저 정보를 저장한다
- Method update()
유저 정보를 수정한다
- Method delete()
유저 정보를 삭제한다
3. 코드
package org.example;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* 메인 클래스 입니다
*/
public class Main {
/**
* JDBC 연결 정보 입니다
*/
private static final String DB_URL = "jdbc:oracle:thin:@192.168.10.39:1521/ORCL";
// jdbc:oracle:thin:@192.168.10.39:1521/ORCL
// jdbc:oracle:thin:@localhost:1521:ORCL
private static final String DB_USERNAME = "";
private static final String DB_PASSWORD = "";
/**
* sql 문을 담을 변수입니다
*/
private static String sql = "";
/**
* sql 구문을 실행하기 위한 변수 입니다
*/
private static PreparedStatement pstmt = null;
/**
* sql 실행 결과를 받아오는 변수 입니다
*/
private static ResultSet rs = null;
/**
* 멤버 객체 입니다
*/
Member member = new Member();
/**
* 메인 메서드 입니다
* @param args 외부로부터 값을 입력 받습니다
*/
public static void main(String[] args) {
try(Connection conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD)) {
System.out.println("DB 연결 성공");
Main main = new Main();
main.insert(conn, "hi", "1234", "한국");
main.selectAll(conn);
main.update(conn, "hi", "5555", "미국");
main.delete(conn, "hi");
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 모든 유저를 불러오는 메서드 입니다
* @return 모든 유저 정보
*/
private List<Member> selectAll(Connection conn) throws SQLException {
System.out.println("selectAll 입장 완료");
sql = "select id, pw, name from member";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
List<Member> members = new ArrayList<>();
try(ResultSet rs = pstmt.executeQuery()) {
while (rs.next() && rs.isClosed() == false) {
member.setId(rs.getString("id"));
member.setPw(rs.getString("pw"));
member.setName(rs.getString("name"));
members.add(member);
}
}
for(int i = 0; i<members.size(); i++) {
System.out.println(members.get(i).getName());
}
return members;
}
}
/**
* 멤버를 생성하는 메서드 입니다
* @param conn db 접속정보
* @param id 생성할 멤버 id 값
* @param pw 생성할 멤버 pw 값
* @param name 생성할 멤버 name 값
* @throws SQLException 쿼리 예외처리
*/
private void insert(Connection conn, String id, String pw, String name) throws SQLException {
System.out.println("insert 입장 완료");
sql = "insert into member(id, pw, name) values(?, ?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, id);
pstmt.setString(2, pw);
pstmt.setString(3, name);
pstmt.executeUpdate();
}
System.out.println(id + "님이 추가 되었습니다");
}
/**
* 멤버를 수정하는 메서드 입니다
* @param conn db 접속정보
* @param id 수정할 멤버 id 값
* @param pw 수정할 멤버 pw 값
* @param name 수정할 멤버 name 값
* @throws SQLException 쿼리 예외처리
*/
private void update(Connection conn, String id, String pw, String name) throws SQLException {
System.out.println("update 입장 완료");
sql = "update member set id = ?, pw = ?, name = ? where id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, id);
pstmt.setString(2, pw);
pstmt.setString(3, name);
pstmt.setString(4, id);
pstmt.executeUpdate();
}
System.out.println(id + "님이 수정 되었습니다");
}
/**
* 멤버를 삭제하는 메서드 입니다
* @param conn db 접속정보
* @param id 삭제할 멤버 id 값
* @throws SQLException 쿼리 예외처리
*/
private void delete(Connection conn, String id) throws SQLException {
System.out.println("delete 입장 완료");
sql = "delete from member where id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, id);
pstmt.executeUpdate();
}
System.out.println(id + "님이 삭제 되었습니다");
}
/**
* 멤버 클래스 입니다
*/
@Getter
@Setter
@NoArgsConstructor
class Member {
private String id;
private String pw;
private String name;
public Member(String id, String pw, String name) {
this.id = id;
this.pw = pw;
this.name = name;
}
}
}