20210513 JSP - DB연결 2

김도현·2021년 5월 13일
0

JSP

목록 보기
3/4

공부중 수정중
Datasourse
JDBC (JAVA DATABASE CONNECTIVITY)
JNDI 를 통해서 DBCP 2에 연결하는 것인가

SQL에 관리자로 접속해서 락 푸는 법

데이터베이스에서 너무 많은 쿼리문을 실행하면 오라클에서 락을 걸어버리기 때문에

관리자로 접속해서 락을 풀어주어야 한다

sysdba 로 접속 --> 최고관리자 ( system 계정보다 위)
**sys 최고관리자

  • 콘솔로 접속해서 run SQL
  • conn sys
  • as sysdba
    **system 중간 관리자

**오라클에서 락이 걸렸을때 푸는 쿼리문

SELECT username, account_status, lock_date FROM dba_users;
ALTER USER USER_NAME ACCOUNT UNLOCK;
ALTER USER system ACCOUNT UNLOCK;

  1. 계정 권한 부여하기
CREATE USER cos IDENTIFIED BY cos1234;

GRANT CREATE SESSION TO cos;

GRANT CREATE TABLESPACE TO cos;

GRANT CREATE TABLE TO cos;

GRANT CREATE SEQUENCE TO cos;

테이블 스페이스 용량 제한 해제 쿼리문

GRANT UNLIMITED TABLESPACE TO cos;
  1. product 테이블 생성 쿼리문 SQL에서 입력
CREATE TABLE PRODUCT (
    id number primary key,
    name varchar2(100),
    price number
);


테이블 생성을 확인


커넥션 객체와 DBCP 2 구성


현재까지 설정한 사진 순서대로

  1. file 생성 other로 Dynamic Web Project로 프로젝트를 생성
  2. 빌드 패스 - WEB-INF 파일 밑에 ojdbc6.jar 파일을 넣어준다 (Web 프로젝트에서만 가능)
    ** Dynamic Web Project 에서는 webapp/WEB-INF/lib 폴더에 넣어주면 자동 빌드패스된다

    우분투에서 자바 빌드패스 하기
    /u01/app/oracle/product/11.2.0/xe/jdbc/lib 디렉토리 밑에 있는 ojdbc6.jar 파일을
    /usr/lib/jvm/zulu8-ca-amd64/lib/ext 로 복사한다

  3. context.xml 구성
    -tomcat 홈페이지 configuration을 보고 설정
 <Resource name="jdbc/myoracle" auth="Container"
              type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
              url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
              username="cos" password="cos1234" maxTotal="20" maxIdle="10"
              maxWaitMillis="-1"/>
  1. web.xml 구성
    -tomcat 홈페이지 configuration을 보고 설정
<resource-ref>
   <description>Oracle Datasource example</description>
   <res-ref-name>jdbc/myoracle</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
</resource-ref>
  1. DBConnection.java 파일로 커넥션 객체 생성
    -tomcat 홈페이지 configuration을 보고 설정
package com.cos.db;

import java.sql.Connection;

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

public class DBConn {
	
	public static Connection 디비연결() {
		try {
			Context initContext = new InitialContext();
			Context envContext  = (Context)initContext.lookup("java:/comp/env");
			DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
			Connection conn = ds.getConnection();
			System.out.println("DB 연결성공");
			return conn; // 리턴을 해줘야 연결성공된채로 유지
			//etc.
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("DB 연결실패");
		return null;	
	}

}

Organize Imports를 통해서 Connection을 import 할때
javax.naming.Context
java.sql.Connection 으로 임포트 해주어야한다!!!
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

DBCP !! 아파치에선 Commons DBCP

DataBase Connection Pool

서버는 데이터베이스와 JDBC 드라이버를 로드하여 커넥션 객체를 받아와 연결(소켓연결)하여 쿼리를 주고 받는다.
여기서


서버가 데이터베이스에 요청을 할때마다 커넥션 객체를 생성해서 연결 하고 종료하게 되면 비효율적이고 서버에서 보내는 요청이 여러개일때 1번 요청(사과)과 응답이 끝이 날때까지 2번(딸기) 요청은 대기하고 있어야한다.

이러한 문제를 해결하기위해 커넥션 객체를 미리 만들어 유지하면서 서버가 커넥션을 요청하면 커넥션을 제공하고 다 사용한 커넥션은 반환받아 효율적으로 연결을 관리하는 기술이
DBCP 이다

profile
코딩하는 무키 공부하는 무키

0개의 댓글