1. Accessing SQL From a Programming Language
SQL은 범용 응용프로그램과 함께 사용되어지는데, 강력하다고 하는 SQL이 독립적으로 사용되지 않는 이유는 무엇일까에 대해 이야기 하고자 한다.
SQL은 선언적 언어로, 어떤 데이터를 필요로 하는지에 대해서만 기술하고 데이터를 어떻게 가져오는지에 대한 기술은 없다(비절차적 언어). SQL는 이렇게 사용하기는 용이하지만 모든 질의를 다 표현할 수는 없다. 즉 C와 JAVA와 같은 프로그래밍 언어로만 표현할 수 있는 질의가 존재한다. 따라서 SQL 표현할 수 없는 질의를 작성하기 위해 더 강력한 프로그래밍 언어에 SQL을 내장시켜야 한다.
또한 보고서 출력, 사용자와의 상호작용, 질의 결과를 GUI로 전달하는 등의 작업은 SQL로 수행할 수 없다.
데이터베이스 서버에 접근하는 방법은 다음과 같은 두 가지가 있다.
Dynamic SQL (동적 SQL)
Dynamic SQL은 프로그래밍 언어를 직접 사용하기 때문에 JAVA API를 호출할 수 있고 따로 컴파일러가 필요하지 않다. 이렇게 하면 함수나 메소드를 사용해서 데이터베이스 서버에 접속하고 통신하는 것이 가능하다. Dynamic SQL은 런타임에 SQL쿼리를 문자열로 만들고 전달한다. 결과를 프로그램 변수로 한 번에 하나의 tuple씩 가져온다. JDBC와 ODBC가 이러한 동작을 하는 응용 프로그래밍 인터페이스이다.
Embedded SQL (내장 SQL)
Embedded SQL도 마찬가지로 데이터베이스 서버와 소통할 수 있는 수단을 제공한다. DB 내의 데이터를 정의하거나 접근하는 SQL문을 응용프로그램 내에 포함시켜 응용 프로그램이 실행될 때 함께 실행되도록 호스트 프로그램에 삽입된 SQL을 Embedded SQL라고 한다. SQL질의를 내장하는 언어를 호스트 언어라고 하는데, Embedded SQL의 문법을 사용하기도 한다. Embedded SQL는 컴파일되기 전에 전처리기를 통해 우선 처리된다. 런타임에 데이터베이스에 접근할 수 있도록 Embedded SQL의 요청을 호스트언어로 된 선언과 함수 호출로 대체되어야 한다. 그 다음에 호스트 언어의 컴파일러로 컴파일한다.
Dynamic SQL의 오류는 런타임시에 발견되지만 Embedded SQL의 오류는 컴파일 시기에 발견된다.
2. JDBC and ODBC
Dynamic SQL의 API로 DB 서버와 상호작용하는 프로그램을 위한 응용프로그램 인터페이스이다. 즉, JDBC는 인터페이스 응용프로그램과 DB를 연결시켜주는 역할을 한다. SQL을 C나 Java와 같은 범용 프로그래밍 언어로 작성할 때는 데이터를 다루는 방식이 다르다는 것을 유의해야 한다. 따라서 JDBC와 같은 API를 사용하는 것이다.
JDBC API를 호출하는 경우는 다음과 같은 세 가지가 있다.
데이터베이스 서버와 연결할 때
데이터베이스 서버에 SQL명령을 보낼 때
쿼리 결과 tuple을 하나씩 결과 프로그램의 변수에 저장할 때
ODBC는 C, C++, C#, Visual Basic과 같은 언어를 사용할 때 사용되는 API이고, JDBC는 Java언어를 위한 응용프로그래밍 인터페이스이다.
JDBC
한 번 JDBC로 작성된 프로그램은 어떤 DBMS를 사용하든 조금만 프로그램을 수정하면 바로 사용할 수 있다. JDBC는 데이터를 질의하거나 갱신하고 또 그 쿼리의 결과를 검색하기 위한 다양한 기능들도 제공하고 있다. 또한 JDBC는 데이터베이스에 있는 릴레이션이나 릴레이션의 속성 이름, 유형에 대한 질의와 메타데이터를 검색할 수 있게 해준다.
통신 방법
데이터베이스에 connection을 연다.
쿼리 문장을 실행시키기 위한 statement 객체를 생성한다.
쿼리를 보내서 쿼리를 실행시키고 쿼리의 결과를 가져온다.