2015-01-29 2 views
1

는 데이터베이스에서 일부 데이터를 페치 한 말 : 결과에jOOQ는 지역 검색 결과를 쿼리합니까?

Record r = <DSLContext>.select()...fetch(); 

합니까 jOOQ 지원 추가 지역 쿼리를?

<DSLContext>.select(...).from(r).where(...)...fetch(); 

경우에 따라 데이터베이스의 이전 쿼리를 기반으로 결과를 로컬로 쿼리하는 것이 좋습니다.

문서에서 유용한 내용을 찾을 수 없어서 대답이 '아니오'라고 생각됩니다. 그러나, 나는 어쨌든, 여기에 그것을 확실히 요구하고 아마도이 특징에 관한 어떤 생각이나 토론을 시작할 것이다. (이것이 SO의 목적은 아니지만).

+1

http://www.jooq.org/java-8-and-sql은 Java 8에서 결과 세트를 스트리밍하고 필터링 할 수 있다고 언급합니다. – Sid

+0

질문 : jOOQ가 실제 SQL 쿼리를 기반으로 스트리밍/필터링 (Java 8, Guava, ...)을 지원합니까? 입력은 테이블이고 출력은 테이블이며 언어는 SQL입니다. 나는 실제 필터링을 구현하지 않고 SQL에만 의존하고 싶습니다. –

+0

@JefJedrison : http://www.jooq.org/java-8-and-sql에 표시된 예제는 결과를 Java 메모리로만 변환합니다. –

답변

1

당신이 정말로 데이터베이스에 또 한 차례의 여행을 원한다면, 그래, 당신이 DSL.table(Result)를 사용하여 org.jooq.Result에서 새 org.jooq.Table을 만들 수 있습니다

select(...) 
.from(DSL.table(result)) 
.where(...) 
.fetch(); 

이것은 데이터베이스가 지원하는 경우 SQL VALUES(...) constructor을 사용하여 테이블을 생성합니다 즉,하거나 UNION ALL과 파생 테이블 :

-- If database supports VALUES() 
SELECT ... 
FROM (VALUES (1, 'a'), 
      (2, 'b'), 
      (3, 'c')) t(column1, column2) 
WHERE ... 

-- Otherwise 
SELECT ... 
FROM (SELECT 1 column1, 'a' column2 UNION ALL 
     SELECT 2  , 'b'   UNION ALL 
     SELECT 3  , 'c') t 
WHERE ... 

-- actual SQL may vary, of course 
Record

대신 Result 걸리는 또 다른 버전이 jOOQ 3.6 로드맵 : #4009. 그동안 원래의 Result 참조를 사용하거나 DSLContext.newResult(...) 메소드 중 하나를 사용하여 새 인스턴스를 만들어야합니다.