본문 바로가기
TIL/DB

[Java] Oracle DB 연결하기

by sun_HY 2023. 4. 19.

 

1. DB 생성 전 자바에서 설정

 

Servers 안의 context.xml을

 

내가 만든 웹 프로젝트의 webapp > META-INF 안에 붙여넣는다.

 

설치되어 있는 apache 버전과 맞는 문서를 찾아서 Context 코드를 찾아 </Context> 안에 붙여 넣고

 

 

개인 오라클 설정에 맞게 수정한다 (url, userName, password 등)

내 경우에는 이런 식

 

   <Resource name="jdbc/myoracle" auth="Container"
              type="javax.sql.DataSource" 
              driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@127.0.0.1:1521:system"
              username="c##scott" 
              password="tiger" 
              maxTotal="20" maxIdle="10"
              maxWaitMillis="-1"/>

 

 

DB 관련 설정이 있는 DBManager 파일을 src 안에 추가한다

 

package web.common;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

/**
 * JDBC를 위한 로드, 연결, 닫기
 */
public class DBManager {
	private static DataSource ds;	// 다른 곳에서 사용하기 위해 static행

	/**
	 * 로드
	 */
	static {
		try {
			// 초기에 한 번 찾으면 됨
			Context initContext = new InitialContext();
			Context envContext  = (Context)initContext.lookup("java:/comp/env");
			ds = (DataSource)envContext.lookup("jdbc/myoracle");
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
		// 여러 번 실행 -> getConnection 안에 있는 것이 맞음
		// Connection conn = ds.getConnection();
	}
	
	/**
	 * 연결
	 */
	public static Connection getConnection() throws SQLException {
		return ds.getConnection();
	}

	/**
	 * 닫기(DML 전용). 사용된 객체를 닫는 것
	 */
	public static void releaseConnection(Connection con, Statement st) {
		try {
			if (st != null) st.close();
			if (con != null) con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 닫기(SELECT 전용)
	 */
	public static void releaseConnection(Connection con, Statement st, ResultSet rs) {
		try {
			if (rs != null) rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		releaseConnection(con, st);
	}
}

 

oracle의 사용을 위해 버전이 맞는 jar 파일도 webapp > WEB-INF > lib 안에 추가한다

 

 

2. Oracle에서 DB 생성

미리 생성해둔 Member class (getter, setter 등 설정 완료)

 

column에 맞게 테이블을 생성하고

 

임시 데이터도 넣어 놓는다. (데이터 받기 위해서는 commit 필수!)

 

 

3. 데이터 조회 및 출력

 

사용될 파일 구조이다. 나머지도 하나씩 만들어보자

 

DAO 파일(interface)도 생성한다. 기능은 일단 selectAll

 

인터페이스를 받아 Impl 파일도 생성한다

package web.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import web.common.DBManager;
import web.dto.Member;

public class MemberDAOImpl implements MemberDAO {

	@Override
	public List<Member> selectAll() {
		Connection con = null;
		PreparedStatement ps = null;
		
		ResultSet rs = null;
		List<Member> list = new ArrayList<>();
		String sql = "select * from member";
		
		try {
			con = DBManager.getConnection();
			ps = con.prepareStatement(sql);
			// ?가 있다면 set 설정
			
			rs = ps.executeQuery();	// resultSet은 executeQuery
			while (rs.next()) {
				Member member = new Member(rs.getString(1), rs.getString(2), rs.getInt(3), rs.getString(4));
				list.add(member);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 닫기
			DBManager.releaseConnection(con, ps, rs);
		}
		
		return list;
	}

}

 

화면을 출력할 jsp 파일도 생성

<%@page import="web.dto.Member"%>
<%@page import="java.util.List"%>
<%@page import="web.dao.MemberDAO"%>
<%@page import="web.dao.MemberDAOImpl"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>

<body>
	<h1>DBCP Test</h1>
	
	<%
		MemberDAO dao = new MemberDAOImpl();
		List<Member> list = dao.selectAll();
	%>
	
	결과: <%= list %>
</body>

</html>

 

서버를 실행하면 정상적으로 데이터가 출력된다!

728x90

'TIL > DB' 카테고리의 다른 글

데이터베이스 모델링  (0) 2024.04.07
데이터베이스 개요  (1) 2024.03.16
[Oracle] join  (0) 2023.04.11
[Oracle] 함수  (1) 2023.04.04
[Oracle] DML - Create, Alter  (0) 2023.03.31