
프로그래밍 언어에서의 SQL 접근
SQL의 한계
SQL이 모든 질의를 다 표현 할 수 없음.
SQL로는 표현할 수 없지만 C나 JAVA, PYTHON과 같은 프로그래밍 언어로 표현가능한 질의가 존재함.
비선언적 동작(e.g 보고서 인쇄, 사용자와의 의사소통, 질의결과를 GUI(그래픽 사용자 인터페이스)에 전달하는 경우 SQL 만으로는 이를 지원할 수 없음.
범용 프로그래밍 언어와 SQL을 결합하기 위한 방법이 필요함.
범용 프로그래밍 언어에서 SQL에 접근하기 위한 두 가지 방법
이 방법들은 프로그램이 데이터베이스 서버와 접속하고 통신할 수 있는 수단을 제공.
1. 동적 SQL (Dynamic SQL = Interactive SQL)
SQL 데이터 베이스에 접속 후 질의 갱신을 수행한다.
프로그램이 실행시간에 SQL 질의를 구성하고 완료할 수 있도록 함.
e.g) JDBC, ODBC
2. 내장 SQL (Embedded SQL = Static SQL)
SQL 구문은 전처리기를 사용해 컴파일 시 식별되어 함수 호출로 변환된다.
실행할 때 함수 호출을 동적 SQL 기능을 제공하는 API를 통해서 데이터베이스에 연결된다.
JDBC
JDBC 표준은 Java 프로그램이 데이터베이스에 접속할 수 있는 API를 정의한다.
API = Application Program Interface
JDBC는 데이터에 대한 질의 및 갱신, 질의 결과 검색을 위한 다양한 기능을 지원한다.
JDBC는 데이터베이스에 있는 릴레이션과 릴레이션 내의 속성의 이름 및 타입에 대한 질의와 같은 메타데이터 검색을 지원한다.
데이터 베이스와 통신하기 위한 모델:
public static void JDBCexample (String userid, String passwd)
{ // DB 접속 개방
try(Connection conn = DriverManager.getConnection("jdbcLoracle:thin:@db.yale.edu:1521:univdb", userid, passwd);
Statment stmt = conn.createStatement(); // Stetment 객체 stat 생성
)
{
...Do Actual Work... // 실제 질의 작성
}
catch(SQLException sqle){ // 예외 처리 메커니즘
System.out.println("SQLException: " + sqle);
}
}
/**
try - with - resource 구문
: try 구문으로 열린 리소스는 try 블록 끝에서 자동으로 닫힌다.
: conn 과 stat가 가리키는 객체들은 해당 try 블록 끝에서 닫힘.
*/
stmt.excuteUpdate(
"insert into instructor values('77987', 'Kim', 'Physics', 98000)"
);
ResultSet rset = stmt.excuteQuery(
"select dept_name, avg(salary) from instructor group by dept_name"
);
while (rset.next()){
System.out.println(rset.getString("dept_name") + " " + rset.getFloat(2)
);
rs.getString("dept_name")
rs.getString(1)
int a = rs.getInt("a"); // a 열의 Int 값 가져오기
if ( rs.wasNull() ) // 해당 열의 값이 null 값이라면
System.out.println("Got null value"); // 해당 메시지 출력