DBMS & JDBC practice_240228

Choi Suyeon·2024년 2월 28일
0

인덱스생성

-인덱스가 설정된 컬럼을 조회하는 DD : user_ind_columns

unique index

  • 컬럼의 값이 유일할 때 사용하는 인덱스.

  • 테이블 생성 시 primary key나 unique 제약사항을 설정하면 자동 생성된다.

  • 개발자가 컬럼의 값이 유일할 때 수동 생성도 가능하다.

    작성법)

     create unique index 인덱스명 on 테이블명( 컬럼명 asc)

non-unique index

-컬럼의 값이 중복될 때 사용하는 인덱스.( 일반컬럼에 주로 적용한다.)
-개발자가 수동으로 생성하는 index

문법)

 create index 인덱스명 on 테이블명( 컬럼명 asc);

bitmap index

-컬럼의 값이 중복이 되긴하나 독특한 코드 형태의 값일 때 사용하는 인덱스.

문법)

create bitmap index 인덱스명 on 테이블명 (컬럼명 )

composite index

  • 여러 개의 컬럼으로 인덱스가 구성되어야 할 때.

  • unique index 계열.

    문법)

     create index 인덱스명 on 테이블명 (컬럼명,,,, );

인덱스를 사용한 정렬

-order by절을 사용한 정렬은 레코드가 많을 수록 속도가 떨어진다.
(index가 설정된 컬럼은 order by 해도 괜찮다 )

  • index를 생성하면 컬럼의 asc이 기본 인덱스로 생성된다.

  • index를 설정한 후 index hint를 사용하면 정렬을 수행 할 수 있다.

    index hint)
    조회컬럼에 /+ / 또는 --+ 로 인덱스 힌트를 사용.

    -인덱스를 사용한 오름차순 정렬

    select /+ index( 테이블명 인덱스명 ) / 컬럼명,,,,,

    -인덱스를 사용한 내림차순 정렬

    select /+ index_desc( 테이블명 인덱스명 ) / 컬럼명,,,,,



JDBC(Java DataBase Connectivity)

  • Java에서 DBMS와 연동하기 위한 저수준 API.
  • java.sql 패키지에서 관련 인터페이스, 클래스를 제공한다.
  • Driver loading방식.( Driver만 제공되면 모든 DBMS와 연동할 수 있다.)

driver type

  • type 1 : JDBC-ODBC Bridge Driver
    -Windows 에서만 사용할 수 있는 Driver. 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내 특정 클래스를 객체화하여 JVM에 instance를 생성하는 일.
  • java.sql.DriverManager : 로딩된 드라이버를 사용하여 DB연결을 얻는 일.
  • java.sql.Connection : DBMS와 연결을 유지, transaction을 처리, 쿼리문 생성객체를 얻는 일.
  • java.sql.Statement : 쿼리문을 실행할때 마다 생성하여 처리하는 객체.
  • java.sql.PreparedStatement : 쿼리문을 미리 생성하고, 값만 나중에 넣어서 처리하는 객체.
  • java.sql.CallableStatement : Procedure를 호출할 때 사용하는 객체
  • java.sql.ResultSet : 조회결과(inline view)를 사용하기위한 객체
  • java.sql.ResultSetMetaData : 실행된 조회 쿼리문에 사용된 테이블의 메타데이터를 얻는 일.
  • java.sql.Types : Procedure의 out parameter에 저장된 값을 임시로 저장하기위한 데이터 형을 제공하기 위한 객체.
  • java.sql.Clob : clob데이터형을 저장하기위한 객체.

JDBC 코딩 순서.

  1. 드라이버 로딩
  2. DB연결 얻기
  3. 쿼리문 생성객체 얻기
  4. 쿼리문 수행 후 결과 얻기
  5. 연결끊기

DBMS와 JVM연결

  1. 드라이버(자바언어로 구현된 DB Client)로딩
    Class.forName("드라이버 클래스");
    Class.forName("oracle.jdbc.OracleDriver")

  2. 로딩된 드라이버를 사용하여 커넥션 얻기.
    String id="계정명";
    String pass="비번";
    String url="DBMS에 접속하기 위한 URL";

Connection con = DriverManager.getConnection(url, id, pass);

query문 생성객체

Statement, PreparedStatement, CallableStatement 객체를 제공.

  • Statement
    -Connection 객체의 createStatement()를 사용하여 객체를 얻는다.
    Statement stmt = con.createStatement();//쿼리문의 정보 없음.

-얻어진 객체는 SQL문을 알지 못한다.
-쿼리문을 실행할 때 마다 새로 생성하고 실행한다.
-동일 쿼리문이 여러 번 실행될 때에는 효율이 좋지 않다.
-SQLInjection공격에 취약하다.

  • PreparedStatement
    -Connection 객체의 prepareStatement(String sql)를 사용하여 객체를 얻는다.
    PreparedStatement pstmt = con.preparedStatement("select,,,");

-얻어진 객체는 SQL문을 안다.
-쿼리문을 한번만 생성하고, 값은 bind변수에 넣어 실행한다.
-동일 쿼리문이 여러 번 실행될 때 효율이 좋다.
-Bind변수를 사용(쿼리문의 특정위치에 값을 묶어주는 변수)
-SQLInjection공격에 안전하다.

  • CallableStatement
    -Connection 객체의 prepareCall()를 사용하여 객체를 얻는다.
    CallableStatement cstmt = con.prepareCall(String 프로시저명);

-Procedure를 실행하기 위해 만들어진 객체.
-bind변수를 사용할 수 있다.
-SQL문은 DB프로시저에 작성하고, 자바에서는 프로시저를 호출하여 사용하기 때문에 코드와 SQL문이 분리될 수 있다.

Statement 사용법

  1. 쿼리문 생성객체 얻기
    Statement stmt = con.createStatement();

  2. 쿼리문 실행(값과 쿼리문이 하나로 합쳐진다. '처리가 불편하다')
    String name = "김동섭";

boolean flag = stmt.execute(쿼리문);
int cnt = stmt.executeUpdate(쿼리문);
ResultSet rs = stmt.executeQuery(쿼리문);

0개의 댓글