데이터베이스를 쿼리하는 인라인 메소드의 리턴 유형: 쿼리 결과의 첫 번째 행

Data 인터페이스의 오버로드된 queryFirst() 메소드를 사용하여 쿼리 결과의 첫 번째 행만 리턴할 수 있습니다.
다음과 같은 상황에서 이 메소드를 사용할 수 있습니다.

pureQuery가 하나의 행만 리턴될 것으로 판별하는 경우, FETCH FIRST ROW ONLY절을 추가하거나 SELECT문을 SELECT-INTO문으로 변경하여 쿼리를 최적화하도록 선택할 수 있습니다.

다른 양식의 queryFirst() 메소드

Data 인터페이스는 세 가지 양식의 queryFirst() 메소드를 제공합니다.

java.util.Map <java.lang.String, java.lang.Object> queryFirst(java.lang.String sql, java.lang.Object... parameters)
queryFirst() 메소드 양식은 java.util.Map<String,Object> 유형의 결과를 리턴합니다. String은 주어진 쿼리의 컬럼 또는 표현식의 소문자 이름입니다. 연관된 Object의 클래스는 컬럼 또는 표현식의 데이터 유형에 따라 다릅니다. 이는 JDBC가 컬럼 또는 표현식의 데이터 유형 인스턴스를 저장하기 위한 기본 클래스로 정의하는 클래스의 인스턴스입니다.
예를 들어, 단일 부서(WORKDEPT)의 직원이 넷 이상인 경우 해당 부서의 평균 정규 학력(EDLEVEL) 년 수가 필요하다고 가정하십시오.

다음 코드는 average_edlevelworkdept 키가 있는 단일 Map을 작성합니다. 코드는 REPORTDEPT의 값을 전달하여 관심 부서를 식별합니다.

Connection con = DriverManager.getConnection(...); 
Data db = DataFactory.getData(con); 
String reportDept = "B01"; 
Map<String, Object> edLevelReport = db.queryFirst(  "SELECT AVG(EDLEVEL) AS AVERAGE_EDLEVEL, WORKDEPT" +  
" FROM SAMPLE_SCHEMA.EMP WHERE WORKDEPT = ?" +  " GROUP BY WORKDEPT HAVING COUNT(*) > 3", reportDept );

Map 대신에 기존 클래스의 인스턴스를 리턴하는 queryFirst() 메소드의 다른 두 양식 중 하나를 사용할 수 있습니다.

예를 들어, com.company.Employee 클래스의 정보를 리턴하는 것으로 충분할 수 있습니다. 이 Bean에는 관심있는 두 가지 항목의 정보를 저장할 수 있는 특성이 있습니다. 그러나 모든 Bean의 특성 값을 제공하지 않으려는 경우 Employee Bean을 채우는 것은 바람직하지 않습니다.

또는 새 Java™ 오브젝트를 가능한 한 필수 정보를 그대로 저장할 수 있는 private 클래스로 저장할 수 있습니다. 이는 자체 문서화하는 지우기 코드를 제공하므로 많은 상황에서 최선의 해결책이 될 수 있습니다. 그러나 이 해결책은 이 새 클래스의 인스턴스를 처리하기 위해 추가 애플리케이션 논리를 필요로 합니다(예를 들어, 컨텐츠를 스프레드시트에 입력하거나 컨텐츠를 XML 문서에 보냄).

public T queryFirst (java.lang.String sql, Class returnClass, Object... parameters)
queryFirst() 메소드의 두 번째 양식은 일반을 사용하여 <T> 유형의 결과를 리턴합니다.
예를 들어, EMPNO가 "000070"인 직원에 대한 Employee Bean의 인스턴스가 필요할 수 있습니다. Employee Bean의 정의는 다음과 같을 수 있습니다.
public Employee { 
@Column(name="EMPNO")  
public String employeeId; 
@Column(name="FIRSTNME")  
public String firstName; 
@Column(name="MIDINIT")  
public String middleInitial; 
public String lastName; 
@Column(name="WORKDEPT")  
public String departmentId; 
@Column(name="PHONENO")  
public String extension; 
public Date hireDate;   }
EMPNO 컬럼은 EMPLOYEE 테이블의 기본 키입니다. 쿼리의 WHERE절이 해당 컬럼을 포함하는 경우, 메소드는 하나의 Employee 오브젝트만 리턴할 수 있습니다. 코드는 다음과 같을 수 있습니다.
Connection con = DriverManager.getConnection(...); 
Data db = DataFactory.getData(con); 
String managerEmp = "000070"; 
com.company.Employee empData = db.queryFirst(   "SELECT EMPNO, FIRSTNME, MIDINIT, LASTNAME, WORKDEPT," +
     " PHONENO, HIREDATE FROM HRDept.Employee" +
     " WHERE EMPNO = ?", Employee.class, managerEmp );
public T queryFirst (java.lang.String sql, RowHandler singleRowHandler, Object... parameters)
queryFirst() 메소드의 세 번째 양식 또한 <T> 유형의 결과를 리턴합니다.
예를 들어, 직원에 대한 정보가 필요하지만 pureQuery가 자동으로 쿼리 결과를 Employee Bean의 특성에 맵핑하지 못할 수 있습니다. RowHandler를 작성하여 해당 맵핑을 수행할 수 있습니다.

피드백