복잡한 문 처리

Microsoft SQL Server JDBC 드라이버를 사용하는 경우 런타임에 동적으로 생성되는 문을 포함하여 복잡한 문을 처리해야 할 수 있습니다. 복잡한 문은 대개 업데이트, 삽입 및 삭제를 포함하여 다양한 태스크를 수행합니다. 또한 이러한 유형의 문은 다중 결과 집합과 출력 매개 변수를 반환할 수 있습니다. 이 경우 문을 실행하는 Java 코드에서 반환되는 개체 및 데이터의 형식과 수를 미리 알지 못할 수 있습니다.

JDBC 드라이버에서는 복합한 문을 효과적으로 처리하기 위해 반환되는 개체 및 데이터를 쿼리하는 다양한 메서드를 제공하여 응용 프로그램에서 이를 올바르게 처리할 수 있도록 합니다. 복잡한 문을 처리하는 기능의 핵심은 SQLServerStatement 클래스의 execute 메서드입니다. 이 메서드는 boolean 값을 반환합니다. 값이 true인 경우 문에서 처음 반환되는 결과는 결과 집합입니다. 값이 false이면 처음 반환되는 결과는 업데이트 횟수입니다.

반환된 개체 또는 데이터의 형식을 알고 있으면 getResultSet 또는 getUpdateCount 메서드를 사용하여 해당 데이터를 처리할 수 있습니다. 복잡한 문에서 이후에 반환되는 개체 또는 데이터를 처리하는 데는 getMoreResults 메서드를 사용합니다.

다음 예제에서는 SQL Server 2005 AdventureWorks 샘플 데이터베이스에 대해 열린 연결을 함수로 전달하고, 저장 프로시저 호출과 SQL 문이 결합된 복잡한 문을 생성하여 실행한 다음, do 루프를 사용하여 반환되는 모든 결과 집합 및 업데이트 횟수를 처리합니다.

public static void executeComplexStatement(Connection con) {
   try {
      String sqlStringWithUnknownResults = "{call dbo.uspGetEmployeeManagers(50)};SELECT TOP 10 * FROM Person.Contact";
      Statement stmt = con.createStatement();
      boolean results = stmt.execute(sqlStringWithUnknownResults);
      int count = 0;
      do {
         if (results) {
            ResultSet rs = stmt.getResultSet();
            System.out.println("Result set data displayed here.");
            rs.close();
         } else {
            count = stmt.getUpdateCount();
            if (count >= 0) {
               System.out.println("DDL or update data displayed here.");
            } else {
               System.out.println("No more results to process.");
            }
         }
         results = stmt.getMoreResults();
      } while (results || count != -1);
      stmt.close();
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

참고

관련 자료

JDBC 드라이버에서 문 사용