2014-12-11 1 views
1

다음 API에 대한 JOOQ API 설명서를 읽었지만 fieldIndex에 대해 아직 이해할 수 없었습니다.fieldIndex about JOOQ 무엇입니까

fetchAny(int fieldIndex, java.lang.Class<? extends T> type) 

예를 들어 다음 코드에서 선택할 열을 이미 알고 있는데 왜 filedIndex가 0이되어야합니까? 0은 무엇을 의미합니까?

String name = getDslContext().select(TESTB.STU_NAME) 
      .from(TESTB) 
      .where(TESTB.ID.eq(studentId)) 
      .fetchAny(0, String.class); 

답변

1

jOOQ는 대부분 Record 유형에서 작동합니다. 다음 쿼리를 만들 때 예를 들어, :

.select(TESTB.STU_NAME) 
.from(TESTB) 
.where(TESTB.ID.eq(studentId)); 

을 당신은 정말 ResultQuery<Record1<String>>에 운영하고 있습니다. 이 유형에 fetchAny(0, String.class)을 호출하면 jOOQ에게 레코드를 가져오고 싶다고 말하고 그 레코드에서 인덱스 0의 값만 가져오고 String으로 변환하려고합니다.

동일한 정보를 두 번 반복하면 (TESTB.STU_NAME을 사용하고 색인 0에서 열을 가져 오는 것처럼 느껴질 수 있습니다). 이것은 fetchign 하나의 값이 jOOQ API에서 매우 특별한 경우이기 때문입니다. 불행하게도 ResultQuery API은 제네릭을 통해 해당 유형 정보가 존재하더라도 실제로 하나의 열만 선택한다는 것을 "알지 못합니다".

하나의 대안은 DSLContext.fetchValue(ResultQuery)을 사용하는 것입니다 : 친절하고 깨끗한 답변

String name = getDslContext().fetchValue(
    DSL.select(TESTB.STU_NAME) 
     .from(TESTB) 
     .where(TESTB.ID.eq(studentId)) 
); 
+0

감사합니다. 대체 솔루션에 대해서도 언급했습니다. 어느 것이 제안 된 방식입니까? 대체 솔루션이 거의 하나의 레코드를 반환하도록 보장합니까? 나는 오직 하나의 기록만을 얻을 필요가있다. 그건 그렇고 초보자를위한 좋은 JOOK 책을 추천합니까? – user3123690

+0

@ user3123690 : 지연되어 죄송합니다. 선호하는 방법은 없습니다. 그러나 "대체 솔루션"인'DSLContext.fetchValue()'는 최대 하나의 값을 반환하도록 보장합니다. 그렇지 않은 경우 [linked Javadoc] (http://www.jooq.org/javadoc/3.5.x/org/jooq/DSLContext.html#fetchValue-org.jooq.ResultQuery-)에 표시된 예외가 발생합니다. [JCG 아카데미에서 무료 jOOQ 코스] (http://academy.javacodegeeks.com/course/type-safe-database-querying-with-jooq/)가 있습니다. –