쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
내용에 대한 소스 코드는 https://github.com/2jaehoon/sangyoungjdbc에 올려두었습니다.
index
- 레코드의 양이 많을 때 빠른 검색을 하기 위해 사용되는 객체
- 자동 인덱스와 수동 인덱스를 제공
자동 인덱스 : 테이블을 생성했을 때 PK, UX에 의해 자동으로 생성되는 인덱스
unique 인덱스가 자동 생성
수동 인덱스 : 개발자가 필요에 의해 생성하는 인덱스
( unique, non unique, bitmap, composite )
- 모든 계정은 index를 생성할 수 있다.
- user_indexes DD에서 확인 가능
- 모든 레코드는 rowid를 가진다.
rowid : recode를 식별하기 위한 주소
- 인덱스는 테이블에서 도출된 객체이지만 테이블과는 별도로 동작을 한다.
시간이 지나면 테이블과 인덱스 간의 데이터의 차이가 발생한다.
일정 주기로 index를 rebuild해야 한다.
- b-tree index를 생성 ( 데이터 양이 많아질 수록 full scan보다 빠른 index scan )
* 인덱스 생성
-- 인덱스로 선정하는 컬럼은
-- where 절에서 자주 사용되는 컬럼, 자주 변경되지 않는 컬럼으로 하는 게 좋다.
create [ 인덱스 종류 ] index 인덱스명 on 테이블명( 컬럼명, ..., ... );
unique index
- 컬럼의 값이 유일할 때 사용하는 인덱스
- 자동 인덱스
- 테이블을 생성할 때 PK나 Unique 제약을 설정하면 자동으로 생성
- user_ind_columns DD에서 인덱스가 설정된 컬럼을 검색 가능
* 인덱스 생성
create unique index 인덱스명 on 테이블명( 컬럼명 );
* 인덱스 삭제
drop index 인덱스명;
non unique index
- 컬럼의 값이 중복될 때 사용하는 인덱스( 일반 컬럼에 주로 적용 )
- 개발자가 수동으로 생성하는 인덱스
* 인덱스 생성
create index 인덱스명 on 테이블명( 컬럼명 );
bitmap
- 컬럼의 값이 중복되나 독특한 형태의 값일 때 사용하는 인덱스( 코드값- ICD_0001 )
- 12c부터 생성이 안됨
* 인덱스 생성
create bitmap index 인덱스명 on 테이블명( 컬럼명 );
composite index
- 여러 개의 컬럼으로 인덱스를 구성해야 할 때
* 인덱스 생성
create index 인덱스명 on 테이블명 ( 컬럼명, ..., ... );
인덱스 재구축( 갱신 )
- 테이블의 변경사항을 적용하여 인덱스를 재구축
alter index 인덱스명 rebuild;
CRUD
- Create( create, insert, grant ), Read( select )
- Update( update, alter, commit, rollback ), Delete( delete, truncate, drop, revoke )
JDBC( Java DataBase Connectivity )
- Java에서 DBMS와 연동하기위한 저수준 API
- java.sql 패키지에서 관련 인터페이스, 클래스를 제공
- Driver loading 방식( Driver만 제공된다면 모든 DBMS와 연동할 수 있다. )
Driver
- DB Server에 접속하기 위한 DB Client를 .class파일로 만든 것
- sun사에서 interface로 작업 목록을 제공하고 DB Vendor사에서
- interface에 해당하는 작업들을 자체개발하여 제공( 4가지 type )
- Driver는 .jar파일로 배포된다.
type 1( JDBC-ODBC Bridge Driver )
- Windows 에서만 사용할 수 있는 방식
- DBMS의 연결을 OS에서 설정하고, Java에서 사용하는 방식
- java에서 제공하는 유일한 드라이버지만 속도가 느리다.
- Windows로 서비스 되는 일이 없기 때문에 잘 사용하지 않는다.
type 2( native driver )
- Driver를 제작한 언어가 Java와는 다른언어로 개발된 Driver 방식
- Driver를 사용하기 위해 별도의 프로그램을 설치해야 한다.
- Middleware에서 주로 사용
type 3( network protocol driver )
- applet에서 DBMS와 연동하기 위한 driver.
type 4 ( native protocol driver )
- JDBC에서 가장많이 사용하는 Driver( 빠른 성능과 안정성을 제공 )
- Driver를 제작한 언어가 Java언어이므로 개발된 자바 프로그램에서
데이터를 주고 문제가 발생하지 않는 Driver 방식( 안정성 )
JDBC 사용객체
- java.lang.Class : 배포된 .jar( driver )를 객체화하여 JVM에 로딩( instance )하는 일
- java.sql.DriverManager : 로딩된 드라이버를 사용하여 DB연결을 얻는 일
- java.sql.Connection : DBMS와 연결을 유지, transaction 처리, 쿼리문 생성객체 얻는 일
- java.sql.Statement : 쿼리문을 쿼리가 실행될 때마다 생성하여 처리하는 객체
- java.sql.PreparedStatement : 쿼리문을 미리 생성하고 값만 나중에 넣어 처리하는 객체
- java.sql.CallableStatement : Procedure를 사용하는 객체
- java.sql.ResultSet : 조회결과를 사용하기 위한 객체
- java.sql.ResultSetMetaData : DD를 사용하지 않고 테이블의 컬럼 정보를 얻기 위한 객체
- java.sql.Types : Procedure에 out parameter값을 임시로 저장하기 위한 데이터 형을 제공하는 객체
- java.sql.Clob : clob 데이터를 사용하기 위한 객체
DBMS 작업 순서
1. 드라이버 로딩( Class )
2. Connection 얻기( DriverManager, Connection )
3. 쿼리문 생성객체 얻기( Statement, PreparedStatement, CallableStatement )
4. 쿼리문 수행 후 결과 얻기( ResultSet, Clob, Types )
5. 연결 끊기( 메모리 누수 발생 )
DB연결작업
1. 드라이버 로딩
Class.forName( “oracle.jdbc.OracleDriver” );
2. 로딩된 드라이버를 사용하여 Connection 얻기
String url=“jdbc:oracle:thin:@DB서버ip:1521:SID”;//위치
String id=“scott”;//계정
String pass=“tiger”;//비번
Connecton con=DriverManager.getConnection( url, id, pass);
쿼리 실행
1. 드라이버 로딩( DB Client사용 )
// Class.forName( “로딩할 드라이버 경로” );
Class.forName(“oracle.jdbc.OracleDriver”);// DB 클라이언트 : DBMS의 테이블을 SQL문을 써서 사용하는 일
2. 로딩된 드라이버를 사용하여 DBMS와 연결하여 Connection을 얻는다.
String url=“jdbc:oracle:thin:@localhost:1521:orcl”;
String id=“scott”;
String pass=“tiger”;
Connection con= DriverManager.getConnection( url, id, pass );
3. 커넥션에서 쿼리문 생성객체 얻기 ( Statement, PreparedStatement )
Statement stmt = con.createStatement();
4. 쿼리문 생성객체를 통해 쿼리문 실행
boolean flag = stmt.execute( SQL문 );
// DBMS를 변경하는 쿼리
// create, drop, alter, truncate은 boolean형
int cnt = stmt.executeUpdate( SQL문 );
// DBMS를 변경하는 쿼리
// insert, update, date은 int형
ResultSet rs = stmt.executeQuery( SQL문 );
// DBMS를 변경하지 않는 쿼리
// select는 ResultSet형
eclipse plugin
- 이클립스가 제공하는 기능 이외에 추가하여 사용할 수 있는 기능
- 설치된 이클립스의 Marketplace, install new software, web site에서 다운받을 수 있다.
'성장 일기 > 쌍용교육센터' 카테고리의 다른 글
0203/PreparedStatement (0) | 2023.02.08 |
---|---|
0202/Statement (0) | 2023.02.02 |
0131/계정 권한, 백업 및 복원, view (0) | 2023.01.31 |
0130/시퀀스, 조인, 정규화 (0) | 2023.01.30 |
0127/테이블 제약 조건 (0) | 2023.01.27 |