[ java ] in KIDS 글 쓴 이(By): hell (나누구야) 날 짜 (Date): 1997년12월28일(일) 09시37분32초 ROK 제 목(Title): [JDBC] Getting Started 한글판 (4-1) 4. Statement 4.1 개요 Statement 객체는 SQL문을 데이터베이스로 전송하는데 사용한다. 실제로 다음과 같은 세종류의 Statement 객체들이 있고 모두 주어진 접속상에서 SQL문들을 실행하기위한 컨테이너들로써 동작한다. Statement Statement로부터 상속받은 PreparedStatement PreparedStatement로부터 상속받은 CallableStatement 이러한 것들은 특정 형태의 SQL문들을 전송하기위해 분화되어졌다. Statement 객체는 매개변수 없는 간단한 SQL문을 실행하는데 사용되며, Statment 인터페이스에는 SQL문들을 실행하고 결과들을 검색하기 위한 기본적인 메쏘드들이 있다. PreparedStatement 객체는 IN 매개변수를 가지거나 가지지 않는 프리컴파일된 SQL문을 실행하는데 사용되고, PreparedStatement 인터페이스는 IN 매개변수들을 다루기 위한 메쏘드들을 포함한다. CallableStatement 객체는 데이터베이스 저장 프로시져(stored procedure)의 호출을 실행하는데 사용되며, CallableStatement 인터페이스에는 OUT 매개변수들을 다루기 위한 메쏘드들이 있다. 4.1.1 Statement 객체들을 생성하기 일단 특정 데이터베이스에 연결되면, 그 접속은 SQL문들을 전송하는데 사용된다. Statement 객체는 아래의 코드처럼 Connection의 createStatement 메쏘드로서 생성되어진다. : Connect con = DriveManager.getConnection(url, "sunny", ""); Statement stmt = con.createStatement(); 데이터베이스로 전송되어질 SQL문은 Statement 객체를 실행하기위한 메쏘드들의 인자로써 공급되어진다.: ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table2); 4.1.2 Statement 객체들을 수행하기 Statement 인터페이스는 SQL문들을 실행하기위한 세가지 다른 메쏘드들(executeQuery, executeUpdate, execute)을 제공한다. 사용하는 것은 SQL문이 무엇을 만드느냐에 좌우된다. executeQuery 메쏘드는 하나의 result set을 만드는 SQL문들에서 사용된다. 명백하게 하기 위해서, 메쏘드의 실행이 리턴하는 것인 리턴값(return value)과 SQL문이 만드는 것인 결과(result)의 용어를 구별할 것이다. 예를들어, executeQuery 메쏘드는 ResultSet 객체를 리턴한다. 그것이 실행하는 SQL문은 result set을 만든다. 그래서 이경우에는 리턴값(SQL문에 의해 생성되어진 result set을 포함하는 ResultSet 객체)은 결과와 같다. 그러나 executeUpdate 메쏘드에서는 다르다. 이 메쏘드는 INSERT, UPDATE 또는 DELETE 문들, 그리고 또한 CREATE TABLE과 DROP TABLE과 같은 SQL DDL(Data Definition Languate)문들을 실행하는데 사용되어진다. INSERT, UPDATE, DELETE 문의 결과는 테이블내의 0 이나 많은 열들내에서 하나이상의 행을 수정하는 것이다. executeUpdate의 리턴값은 작용한 열의 개수(갱신 카운트로 간주되는)를 나타내는 정수이다. 이것은 update문의 결과와는 전적으로 다르다. CREATE TABLE과 같은 SQL문은 또다른 상황이 나타난다. 즉, 그것은 새로운 테이블을 만들고, 그것이 결과이지만, 아무것도 리턴하지는 않는다. 이러한 경우에 executeUpdate 메쏘드는 0를 리턴한다. 따라서 executeUpdate의 리턴값이 0 일 때, 그것은 다음 두가지 중 하나를 의미할 수 있다. 1) 실행된 SQL문은 열들에 영향을 주지 않는 INSERT, UPDATE 또는 DELETE이다. 2) 실행된 SQL문이 DDL 문들이다. 실행문을 위한 모든 메쏘드들은 하나가 오픈되어있다면 호출된 Statement 객체의 현재 result set을 닫아야 한다. 이것은 Statement 객체를 다시 실행하기전에 현재 ResultSet 객체의 어떠한 처리도 완결해야 할 필요가 있다는 것을 의미한다. Statement 인터페이스에 있는 모든 메쏘드를 상속하는 PreparedStatement는 자체의 executeQuery, executeUpdate 그리고 execute 메쏘드를 가지고 있음을 주의해야한다. Statement 객체들은 자체에 SQL문을 포함하지 않는다. 그러므로 Statement.execute 메쏘드의 인자로써 제공되어져야 할 것이다. PreparedStatement 객체들은 이러한 메쏘드의 매개변수로써 SQL문을 제공하지 않는다. 왜냐하면 이미 사전에 컴파일된 SQL문을 포함하기 때문이다. CallableStatement 객체들은 PreparedStatement 형태의 이러한 메쏘드들을 상속한다. PreparedStatement 나 CallableStatement 버전의 이러한 메쏘드들에서 질의(query) 매개변수를 사용하는 것은 SQLException이 발생하도록 한다. ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~ KAIST전기및전자공학과학부96김태홍 URL :: http://volt.kaist.ac.kr/~dodo dodo@ohm dodo@csqueen dodo96@nownuri hell@kids nextism@ara ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~~ ~~moom~ |