데이터베이스와 프로그래밍

김지윤·2023년 3월 17일
0

데이터 베이스

목록 보기
2/7

<프로그램에서 데이터 베이스 사용하는 방법>


1. 임베디드 방식

  • 응용 프로그램 코드 안에 SQL문을 내포하여 사용한다.

  • SQL문들은 전처리기를 통해 DB 호출 함수로 변환하고 이 다음에 컴파일을 한다.

  • EXEC SQL와 END-EXEC로 호스트 언어 내에서 구분한다.

  • 자바에서 내장된 SQL문은 SQLJ라고 부른다.

  • 임베디드된 SQL문의 결과가 여러 튜플이 한꺼번에 나올 경우, 커서(반복자)를 이용해 하나씩 처리한다.

  • FETCH문으로 다음 튜플을 넘어감

  • : (콜론)으로 변수를 사용

  • 정적인 프로래밍이다.



2. API를 활용한 라이브러리 방식

  • SQL CLI (Call Level Interface) :

    • 프로그램 코드 안에서 라이브러리를 호출하여 데이터 베이스를 사용하는 방식이다.

    • 동적인 프로그래밍이다.

    • SQL문들이 동적으로 만들어져 호출된 곳에 문자열 매개변수로 전달된다.

    • JDBC : (Java에서 사용하는 라이브러리)

      • 여러 회사의 DBMS를 연결할 수 있다.
      • 사용법 (insert) :
        1. 응용 프로그램에서 JDBC 라이브러리를 가져온다.
        2. JDBC 드라이버를 로드한다.
        3. Connection으로 DB에 연결할 객체를 생성한다.
        4. Statement로 sql 작성할 객체를 생성한다.
        5. sql 객체에 insert 값들을 넣어준다.
        6. DB와 작업한 결과들을 ResultSet에 테이블 형태로 반환받을 수 있다.



3. 새로운 언어를 만듬 (저장 프로그램)

  • DBMS 안에 함수 형태로 프로그램 코드를 작성해 놓는다.

  • 응용 프로그램에서는 DB에 있는 프로시저나 함수를 호출하여 사용한다.

  • 내장형 방식보다 더 효율적이다.

  • 장점 :

    • 한번 만들어 놓으면 여러번 호출하여 사용가능한 모듈식 프로그래밍이 가능하다.
    • 프로시저 이름만 호출하면 되니 간편하다
    • 보안에 좋다
  • 저장 프로시저 :

    • 저장 함수에서 호출가능
1.
	DELIMITER $$
	CREATE PROCEDURE abc()
	BEGIN
		DECLARE a INT;
	    DECLARE b INT;
	    DECLARE c INT;
	    SET a=200; SET b=300; SET c = a+b;
	END $$
	DELIMITER ;
	CALL abc();
    
    
2.  파라미터에 입력값  
    DELIMITER $$
    CREATE PROCEDURE search(IN host_name VARCHAR(10))
    BEGIN
    	SELECT * FROM student WHERE name = host_name;
    END $$
    DELIMITER ;
    
    CALL search('홍길동');
    
    
3. 파라미터에 출력값
	DELIMITER $$
    CREATE PROCEDURE get(IN project_num INT, OUT result INT)
    BEGIN
    	DECLARE department_num INT;
        SELECT dnum INTO department_num FROM project WHERE pnumber = project_num;
        SET result = department_num;
    END $$
    DELIMITER ;
    
    CALL get(1, @result);
    SELECT @result;

  • 저장 함수 :
    • 프로시저에서 호출 불가능
    • 리턴 값이 필수
    • 함수 안에서 SELECT문 사용 불가능
DELIMITER $$
CREATE FUNCTION get(bYEAR INT) RETURNS INT
BEGIN
	DECLARE age INT;
  	SET age = YEAR(CURDATE())-bYEAR;
  	RETURN age;
END $$
DELIMITER ;
  
SELECT get(1998);

  • 트리거 : 특정 조건이나 동작이 발생하면 자동으로 호출되는 일종의 저장 프로그램



<응용 프로그램과 데이터 베이스의 간극>

응용 프로그램은 JAVA나 C언어 등으로 이루어져있다.
JAVA나 C언어는 절차적으로 한줄 한줄 명령어가 실행된다.

데이터베이스는 SQL 언어를 사용한다.
SQL은 쿼리를 통해 집합이 결과로 반환된다.

이 두 언어의 간극을 '임피던스 불일치'라고 부른다.


<임피던스 불일치 해결법!>

  • DB의 결과 집합을 하나씩 가져와 사용할 수 있도록 해주는 도구를 '커서'라고 부른다.
  • 커서는 튜플 결과가 여러개일 때, 하나씩 가져오기 위해 사용한다.
  • 자바에서는 커서를 반복자라고 부른다.
  • fetch 문장을 사용




API 라이브러리로 데이터 베이스 사용

  • 응용 프로그램 안에서 함수 호출(API)을 하여 DB에 접근
  • SQL/CLI (ISO에서 만든 국제 표준), JDBC(자바) (많이 사용 중), ODBC(C언어) 방식이 있다.
  • 함수를 이용하므로 런타임에 DB에 접근하게 된다. (동적)
  • Maria DB, Oracle 등 DBMS 종류와 무관하게 사용가능 (표준으로 정의되어 있음)
profile
꾸준하게 공부하고 기록하는 개발자

0개의 댓글