JAVA와 Oracle DB 연동 (JDBC/DAO/DTO/Eclipse)

knk.log·2024년 1월 4일
0

개요

저번 학기에 JSP 수업을 수강하면서 데이터베이스 MySQL과 자바를 연동하는 실습을 했었는데, 이번에 스스로 자바 프로젝트를 하면서 데이터베이스 Oracle과 자바를 연동해보기로 하였다. DB 연동부터 데이터베이스 연결, SQL활용까지 생각보다 간단하지만 혼자서 구글링하면서 하다보니 많이 헤매서 기록한다!

DB 연동

JDBC 드라이버 연결

프로젝트 우클릭 - Properties - Java Build Path - Libraries
Add External JARs - ojdbc6.jar 추가
JDBC 경로 C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib


DTO

DTO(Data Transfer Object)는 순수한 데이터 객체만 가진 클래스
사용할 데이터를 private으로 선언 후, Getter & Setter로 메서드 생성


DAO

DAO(Data Access Object)는 데이터베이스에 접근하는 객체
데이터베이스 연결 및 활용 메서드 생성

DB 연결

데이터베이스에 연결하여 접근하는 코드

DB 연결 정보 선언 (드라이버/URL/아이디/비밀번호)

// DB 연결 정보
String driver = "oracle.jdbc.driver.OracleDriver"; 
String url = "jdbc:oracle:thin:@{IP주소}:{port번호}:{DBservicename}";
String dbid = "DB아이디";
String dbpwd = "DB비밀번호";

DB 연결 객체 Import 및 선언 (Connection/PreparedStatement/ResultSet)

// DB 연결 객체
Connection conn = null; // DB 연결 객체
PreparedStatement pstmt = null; // Connection로 SQL 명령 실행 객체
ResultSet rs = null; // SQL 실행 결과 저장 객체

DB 연결 함수 생성

// DB 연결
public void connect() {
    try {
    	Class.forName(driver);
    	conn = DriverManager.getConnection(url, dbid, dbpwd);
    }
    catch(Exception e){ 
    	e.printStackTrace();
    }
}

DB 연결 해제 함수 생성

// DB 연결 해제
public void disconnect() {
	if(conn != null) {
		try {
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	if(pstmt != null) {
		try {
			pstmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	if(rs != null) {
		try {
			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

SQL

데이터베이스에 접근하여 데이터를 활용하는 코드

INSERT / DELETE / UPDATE

결과가 나오지 않는 SQL문 처리

public void Join(String id, String pwd) {
	// DB 연결
	connect();
	// SQL문 생성
	String SQL = "INSERT INTO ACCOUNT VALUES (?,?)";
    // SQL문 처리
	try {
		pstmt = conn.prepareStatement(SQL);
		pstmt.setString(1, id);
		pstmt.setString(2, pwd);
		pstmt.executeUpdate(); // SQL문 실행
	} catch(SQLException e) {
		e.printStackTrace();
	}
    // DB 연결 해제
	disconnect();
}

SELECT

결과가 1줄일 때 (DTO)

public FlightDTO GetFlight(String flightId) {
	// DB 연결
	connect();
	// 객체 생성
	FlightDTO fdto = new FlightDTO();
	// SQL문 생성
	String SQL = "SELECT * "
			+ "FROM FLIGHT "
			+ "WHERE FLIGHT_ID = ?";
    // SQL문 처리
	try {
		pstmt = conn.prepareStatement(SQL);
		pstmt.setString(1, flightId);
		rs = pstmt.executeQuery();
		while(rs.next()) {
			fdto.setFlight_id(rs.getString(1));
			fdto.setFlight_date(rs.getString(2));
			fdto.setFlight_time(rs.getString(3));
			fdto.setFlight_price(rs.getString(4));
		}
	} catch(SQLException e) {
		e.printStackTrace();
	}
	disconnect();
	return fdto;
}

결과가 여러 줄일 때 (ArrayList)

public ArrayList<ReservationDTO> CheckReservation(String accountId){
	// DB 연결
	connect();
	// 배열 생성
	ArrayList<ReservationDTO> rList = new ArrayList<>();
	// SQL문 생성
	String SQL = "SELECT R.RESERVATION_ID, R.RESERVATION_PRICE, R.FLIGHT_ID "
			+ "FROM RESERVATION R, FLIGHT F "
			+ "WHERE R.FLIGHT_ID = F.FLIGHT_ID "
			+ "AND ACCOUNT_ID = ?";
    // SQL문 처리
	try {
		pstmt = conn.prepareStatement(SQL);
		pstmt.setString(1, accountId);
		rs = pstmt.executeQuery();
		while(rs.next()) {
			ReservationDTO rdto = new ReservationDTO(); // 객체 생성
			rdto.setReservation_id(rs.getString(1));
			rdto.setReservation_price(rs.getString(2));
			rdto.setFlight_id(rs.getString(3));
			rList.add(rdto); // 배열에 데이터 추가
		}
	} catch(SQLException e) {
		e.printStackTrace();
	}
	disconnect();
	return rList;
}

🪄 [GitHub] 위 방법 활용한 자바 프로젝트

0개의 댓글