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>
서버를 실행하면 정상적으로 데이터가 출력된다!
'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 |