pureQuery 리팩토링 예: 결과 세트를 리턴하는 인라인 메소드

이 예의 코드는 pureQuery 응옹프로그램에서 결과 세트를 리턴하는 인라인 메소드를 리팩토링하는 방법을 보여줍니다.

DepartmentInlineSample 클래스는 DEPARTMENT 테이블에 인라인으로 액세스하는 방법을 보여줍니다. pureQuery에 의해 생성되는 이 클래스는 인라인 메소드 스타일의 프로그래밍을 보여주며 CREATE, INSERT, UPDATE 및 DELETE문에 대한 샘플과 제안을 포함하고 있습니다.

리팩토링된 newInline 메소드를 사용하여 Java™ 스토어드 프로시저를 작성할 수 있습니다.

package INLINE;

// Imports
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Iterator;
import com.ibm.pdq.runtime.Data;
import pureQuery.example.SampleUtil;
import com.ibm.pdq.runtime.ResultIterator;
import com.ibm.pdq.runtime.factory.DataFactory;

import java.sql.*;

public class DepartmentInlineSample {

  public static void newInline(ResultSet[] rs) throws SQLException,Exception{
    Connection con = DriverManager.getConnection("jdbc:default:connection");
    Data d = DataFactory.getData(con);
	
    rs[0] = d.queryResults(
       "SELECT DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION"
             + "  FROM DEPARTMENT");
}

  public static Data db = null;
  /**
   * @param args
   */

  public static void main(String[] args) {
    try {
      if (args.length < 1) {
        SampleUtil.println("All required arguments were not provided.");
        return;
      }
      db = SampleUtil.getData(
               "jdbc:db2://iicriollo3.svl.ibm.com:50000/SAMPLE:retrieveMessagesFromServerOnGetMessage=true;",
               "db2admin", args[0]);
      db.setAutoCommit(false);
      Iterator<Department> getDepartments = db.queryIterator(
              "SELECT DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION"
                     + "  FROM DEPARTMENT",
               Department.class);

      Department bean = null;
      if (getDepartments.hasNext()) {
        bean = getDepartments.next();
        ((ResultIterator<Department>) getDepartments).close();
      } else {
        SampleUtil.println("Result set is empty.");
        db.rollback();
        return;
      }
      Department getDepartment = db.queryFirst(
              "SELECT DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION"
                     + "  FROM DEPARTMENT"
                     + "  WHERE DEPTNO = :deptno",
               Department.class, bean);
      SampleUtil.printClass(getDepartment);

      db.update(
              "UPDATE DEPARTMENT"
                     + "  SET DEPTNO = :deptno, DEPTNAME = :deptname, MGRNO = :mgrno,"
                     + "      ADMRDEPT = :admrdept, LOCATION = :location"
                     + "  WHERE DEPTNO = :deptno",
              bean);
      getDepartments = db.queryIterator(
              "SELECT DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION"
                     + "  FROM DEPARTMENT",
              Department.class);
      SampleUtil.println("Results for update (bean)");
      SampleUtil.printAll(getDepartments);

      db.update("DELETE FROM DEPARTMENT"
                     + " WHERE DEPTNO = :deptno", bean);
      getDepartments = db.queryIterator(
              "SELECT DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION"
                     + "  FROM DEPARTMENT",
              Department.class);
      SampleUtil.println("Results for - delete (?)");
      SampleUtil.printAll(getDepartments);

      db.update(
              "INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION)"
                     + "  VALUES (:deptno, :deptname, :mgrno, :admrdept, :location)",
              bean);
      getDepartments = db.queryIterator(
              "SELECT DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION"
                     + "  FROM DEPARTMENT",
              Department.class);
      SampleUtil.println("Results for - insert (bean)");
      SampleUtil.printAll(getDepartments);

      db.commit();
    } catch (Exception exp) {
      SampleUtil.println(exp.getMessage());
      SampleUtil.println(exp.toString());
      if (db != null)
        db.rollback();
    } finally {
      if (db != null)
        db.close();
    }
  }

}

피드백