DB 연동을 위해서는 sys 게정을 제외하고 연동을 위한 사용자 계정이 필요하다.
윈도우 검색창 > cmd
(명령 프롬프트)
# 1. sys 게정으로 접속
sqlplus / as sysdba
# 2. 사용자 생성
## create user [아이디] identified by [패스워드];
SQL> create user park identified by park;
# 3. 생성된 계정 활성화
## alter user [아이디] account unlock;
SQL> alter user park account unlock;
# 4. 권한 부여
## grant connect, resource to [아이디];
SQL> grant connect, resource to park;
Oracle 을 설치하면, 기본적으로 하위 디렉터리에 ojdbc가 존재한다. (따로 다운 불필요)
오라클 설치시, oracle 하위 디렉터리에 ojdbc.jar 파일이 자동 생성되어있었다.
이 경로를 따라 찾아간다.
ojdbc8.jar
을 복사해서, webapp > WEB-INF > lib 경로에 붙여넣는다.
JDBC 기본 구동 절차 를 참고하여 jsp 파일을 작성한다.
<%@page import="java.sql.*"%>
<%@ 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>
<%
Connection con = null;
Boolean connect = false;
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); // 드라이버 로드
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "park", "park"); // 연결
connect = true;
con.close();
} catch(Exception ex) {
connect = false;
ex.printStackTrace();
}
%>
<%
if (connect = true) { %>
<h3>DB 연결 성공</h3>
<% } else { %>
<h3>DB 연결 실패</h3>
<% } %>
</body>
</html>
이 방법의 단점?
- 사용자가 매번 요청할때마다 Driver 로드, Connection 객체 생성/연결/종료하므로 비효율적
- 계정 정보가 그대로 노출
- 커넥션 풀 多 사용
- 커넥션 풀은 tomcat(WAS)이 실행될 때, DB와 연결된 객체들이 Pool에 저장되고,
클라이언트 쪽에서 요청이 오면 Connection을 빌려주고 처리가 끝난 후에는 반납받는 저장받식을 사용- 만약 동시 접속자 多 면, 사용중인 Connetion이 반납될 때까지 나머지 접속자들은 대기해야한다.
주의!
jdbc:oracle:thin:@localhost:1521:orcl
DB 연결의 url 입력 시 'orcl' 대소문자 구분에 주의하자.
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name = "Oracle_park"
auth="Container"
driverClassName="oracle.jdbc.driver.OracleDriver"
type="javax.sql.DataSource"
url = "jdbc:oracle:thin:@localhost:1521:orcl"
username="park"
password="park"
maxActive="20"
maxIdle="10"
maxWait="-1"
/>
</Context>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
<display-name>jsp_oracle_prj</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<description>Connection</description>
<res-ref-name>Oracle_park</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
<%@page import="javax.sql.*"%>
<%@page import="javax.naming.*"%>
<%@page import="java.sql.*"%>
<%@ 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>
<%
Connection con = null;
Boolean connect = false;
try {
// 1. 컨택스트 객체 생성해서, 커넥션 풀 생성
Context init = new InitialContext();
// 2. 쓰레드 풀 관리자 객체 생성
DataSource ds = (DataSource) init.lookup("java:comp/env/Oracle_park");
// 3. Source로부터 커넥션 풀(객체) 얻기
con = ds.getConnection();
connect = true;
con.close();
} catch(Exception ex) {
connect = false;
ex.printStackTrace();
}
%>
<%
if (connect = true) { %>
<h3>DB 연결 성공</h3>
<% } else { %>
<h3>DB 연결 실패</h3>
<% } %>
</body>
</html>
컨택스트 객체 생성해서, 커넥션 풀 생성
쓰레드 풀 관리자 객체 생성
이 방법의 장접?
- 보안성
- '방법 1. 직접 DB 연결' 에서 보다 더 적은 커넥션 풀을 사용하게 된다.
- 원하는 것만 사용한 후 반환하기 때문에, 빠른 속도
참고
주의!
webapp 하위에 jsp 파일이 존재해야한다.
참고: [Eclipse] 이클립스[3]: 이클립스 - JDBC(오라클DB/sqldevoper) 연동하기
참고: [JSP] JSP에서 DB연동하기 (JDBC, 오라클, 커넥션 풀)
참고: JDBC를 이용한 DB작업_커넥션풀(Connection Pool) [3/3]