[ Review 복습 ]
Java application | JDBC Interface | DBMS |
- Connection |
- Oracle SQL - Mysql - mssql |
JDBC Interface 사용 이유 : 응집도 ↑ 결합도 ↓
→ 데이터 베이스의 종류는 다양하기 때문에, 단일한 방법으로 사용하기 위해서, Java application에서 JDBC의 인터페이스를 implements(구현)하기만 하면 사용할 수 있는 간편함을 지니기 때문이다. (Encapsulation)
→ DBMS에서 데이터가 변경되더라도, interface에서 연동이되기 때문에 유지보수에 용이하다 (Polymorphism 다형성)
JDBC 실행단계
정보 조회 시 | 정보 수정 시 |
1. 드라이버 로딩 → Class.forName(class); |
1. 드라이버 로딩 → Class.forName(class); |
2. 연결 → Connection |
2. 연결 → Connection |
3. SQL문 정의 : SELECT | 3. SQL문 정의 : DELETE, INSERT .. |
4. PreparedStatement 정의 |
4. PreparedStatement 정의 |
5. SQL문 완성 : ? 채우기 → setString() / setId() |
5. SQL문 완성 : ? 채우기 -- 3단계에서 ? 가 있었다면 → setString() / setId() |
6. SQL문 실행하여 ResultSet에 할당 → 실행 함수 : rs = pstmt.executeQuery() |
6. SQL문 실행 → 실행 함수 : pstmt.executeUpdate(sql) |
7. ResultSet → rs.next() → rs.getString() / getInt() |
[ SEQUENCE ]
: 순차적으로 증가하는 유일한 값을 생성하기 위한 객체
* 주로 primary key (unique + not null) 를 생성하기 위해 사용하며, 테이블과는 독립적 구조이다.
생성 방법
CREATE SEQUENCE 시퀀스명
[ START WITH 시작번호 ]
[ INCREMENT BY 증가값 ]
[ MAXVALUE 최대값 ]
[ MINVALUE 최소값 ]
[ CYCLE ] or [ NOCYCLE ] //반복할것인지 여부
[ NOCACHE ] //비정상 종료 시에도 sequence가 이어지도록
CREATE SEQUENCE test_seq;
삭제 방법
DROP SEQUENCE test_seq;
Oracle dual table
: 오라클에서 제공하는 기본 테이블
- 컬럼 하나만 존재, 주로 시퀀스 또는 날짜함수, 산술연산에 사용
- sys Admin 계정에서 관리하며, 수정 및 삭제 등 조작은 불가
조회 방법
SELECT *
FROM dual;
dual table을 이용해 생성한 시퀀스 값을 확인
시퀀스명.nextval 로 생성 → 다음 시퀀스 값을 생성(계속 값이 증가됨)
SELECT test_seq.nextval
FROM dual;
현재 시퀀스 값을 확인
시퀀스명.currval 로 생성 → 하나의 컨넥션(session)에서 nextval 후에만 currval 사용 가능
: 다수의 사용자들에 의해 공유되는 시퀀스이므로, 하나의 컨넥션(session)에서만 시퀀스 현재값을 볼 수 있다.
SELECT test_seq.currval
FROM dual;
* Session(세션) 이란?
: 장치 간의 정보교환
( 서버 - 클라이언트 시스템에서,
클라이언트 쪽에서 정보교환에 사용되는 것 → 쿠키
서버 쪽에서 정보교환에 사용되는 것 → 세션 )
SEQUENCE 활용 예제
CAR table 생성해서 시퀀스 적용해보기
1. CAR table 테이블 생성
CREATE TABLE car(
car_no NUMBER PRIMARY KEY, -- 시퀀스 자동발급
model VARCHAR2(100) NOT NULL
)
2. car_seq 이름으로 시퀀스 생성
CREATE SEQUENCE car_seq;
3. sequence로 insert해보기
INSERT INTO car(car_no, model) VALUES(car_seq.nextval, '소나타');
INSERT INTO car(car_no, model) VALUES(car_seq.nextval, '말리부');
CAR table 결과
추가 예제 → https://creamilk88.tistory.com/61
'DB > 이론 및 개념' 카테고리의 다른 글
[day_05] DB / 08. 기본 SQL 5 - DCL ( COMMIT, ROLLBACK ) (2) | 2020.08.12 |
---|---|
[day_04] DB / 07. JDBC Interface 를 다시 한 번 복습하자! (0) | 2020.08.11 |
[day_02] DB / 05. 기본 SQL 3 - Oracle 함수 (0) | 2020.08.08 |
[day_02] DB / 04. 기본 SQL 2 - DDL (CREATE, ALTER), DML (INSERT, UPDATE) (0) | 2020.08.07 |
[day_02] DB / 03. JDBC (Java Database Connectivity) (0) | 2020.08.07 |