Statement 오브젝트
Statement 오브젝트는 정적 SQL문을 처리하고 이 SQL문에서 생성된 결과를 획득하기 위해 사용됩니다. 한 번에 각 Statement 오브젝트에 대한 한 개의 ResultSet만 열 수 있습니다. SQL문을 처리하는 모든 statement 메소드는 열린 Resultset이 존재하는 경우 명령문의 현재 Resultset을 내재적으로 닫습니다.
명령문 작성
Statement 오브젝트가 createStatement 메소드를 사용하여 Connection 오브젝트로부터 작성됩니다. 예를 들어, conn이라고 명명된 Connection 오브젝트가 이미 존재하는 것으로 가정하여 다음 코드 행은 SQL문을 데이터베이스에 전달하기 위한 Statement 오브젝트를 작성합니다.
Statement stmt = conn.createStatement();
ResultSet 특성 지정
ResultSets의 특성은 결국 Resultset을 작성하는 명령문과 연관됩니다. Connection.createStatement 메소드를 사용하여 이러한 ResultSet 특성을 지정할 수 있습니다. 다음은 createStatement 메소드에 대한 유효한 호출의 일부 예입니다.
예: createStatement 메소드
// The following is new in JDBC 2.0 Statement stmt2 = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATEABLE); // The following is new in JDBC 3.0 Statement stmt3 = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY, ResultSet.HOLD_CURSOR_OVER_COMMIT);
이러한 특성에 대한 자세한 정보는 ResultSets의 내용을 참조하십시오.
처리 명령문
Statement 오브젝트로 SQL문을 처리하는 것은 executeQuery(), executeUpdate() 및 execute() 메소드를 사용하여 실행됩니다.
SQL 쿼리에서 결과 리턴
ResultSet 오브젝트를 리턴하는 SQL 쿼리 명령문을 처리해야 하는 경우 executeQuery() 메소드를 사용해야 합니다. Statement 오브젝트의 executeQuery 메소드를 사용하여 ResultSet를 획득하는 예 프로그램을 참조할 수 있습니다.
주: executeQuery를 사용하여 처리된 SQL문이 ResultSet를 리턴하지 않는 경우 SQLException이 발생합니다.
SQL문의 갱신 계수 리턴
SQL이 DDL(Data Definition Language) 명령문 또는 갱신 계수를 리턴하는 DML(Data Manipulation Language) 명령문으로 알려져 있는 경우 executeUpdate() 메소드를 사용해야 합니다. StatementExample 프로그램은 Statement 오브젝트의 executeUpdate 메소드를 사용합니다.
예상 리턴이 알 수 없음인 SQL문 처리
SQL문 유형을 알 수 없는 경우 execute 메소드를 사용해야 합니다. 이 메소드가 처리되고 나면 JDBC 드라이버가 API 호출을 통해 SQL문이 생성한 결과 유형을 애플리케이션에 알릴 수 있습니다. execute 메소드는 결과가 한 개 이상의 ResultSet이면 true를 리턴하고 리턴값이 갱신 계수인 경우 false를 리턴합니다. 이 정보가 제공되면 애플리케이션이 statement 메소드의 getUpdateCount 또는 getResultSet를 사용하여 SQL문 처리의 리턴값을 검색할 수 있습니다. StatementExecute 프로그램은 Statement 오브젝트에 대해 execute 메소드를 사용합니다. 이 프로그램은 SQL문인 매개변수가 전달될 것으로 예상합니다. 제공하는 SQL의 텍스트를 보지 않고도 프로그램이 명령문을 처리하고 처리된 내용에 대한 정보를 판별합니다.
주: 결과가 ResultSet일 때 getUpdateCount 메소드를 호출하면 -1을 리턴합니다. 결과가 갱신 계수인 경우 getResultSet 메소드를 호출하면 널을 리턴합니다.
cancel 메소드
원시 JDBC 드라이버의 메소드는 두 개의 스레드가 같은 오브젝트에 대해 실행되어 오브젝트를 손상하는 것을 방지하기 위해 동기화됩니다. 예외는 cancel 메소드입니다. cancel 메소드는 같은 오브젝트에 대해 다른 스레드에서 SQL문을 장기 실행하는 것을 중단하기 위해 한 개의 스레드에서 사용될 수 있습니다. 원시 JDBC 드라이버는 스레드가 작업 수행을 중단하도록 강제실행할 수 없고 이 스레드가 수행 중인 태스크를 중단하도록 요청만 할 수 있습니다. 이러한 이유로 취소된 명령문을 중단하는 데에도 시간이 소요됩니다. cancel 메소드는 시스템에서 런어웨이 SQL 쿼리를 정지시키는 데 사용할 수 있습니다.