2010-06-28 2 views
1

SQLite에서는 표준 C 인터페이스를 사용합니다. 의 결과 집합에을 반복하는 쉬운 방법이 있습니다 (비트 해킹이더라도). 나는 결과를 캐싱하지 않으려 고 노력하고있다.sqlite : 결과 집합의 이전 레코드로 이동 하시겠습니까?

나는 그 반대의 결과를 반환 할 여분의 쿼리를 실행하는 것으로 생각했지만 해결책은 얼마나 효율적인지 확신하지 못했습니다.

+0

"결과 캐싱을 피하십시오"라는 말은'sqlite3_get_table()'을 사용하지 않는 것을 의미합니까? –

답변

2

아니요, sqlite 반복 코드는 특별히 단방향입니다. 나는 당신이 원하는 것을 성취 할 수있는 해킹 방법조차 알고 있지 않다.

역방향 쿼리의 방법이 약간 효과가있을 수 있지만 더 이상 역방향 쿼리를 "앞으로"(그 뒤로) 만들지 않아도 정상 쿼리를 거꾸로 만들 수 있습니다.

전달 쿼리가 50 번째 행에 도달하고 역방향 쿼리가 20 번째 행에 도달하면 행 21에서 49까지 두 페이지 모두에서 액세스 할 수 없게됩니다. 따라서 범용 탐색 방법으로는 사용할 수 없습니다.

레코드를 한 번에 50 개씩 표시하고 사용자가 행을 앞뒤로 스크롤 할 수 있도록 허용하는 것과 같은 페이징 메커니즘을 구현한다고 가정 할 때 많은 기능을 실행하는 오랜 시간의 방법에 의존해야 할 수 있습니다 쿼리를 한 번에 하나씩 수행하여 각 행에서 50 개의 행만 검색합니다. 다음과 같음 :

select f1, f2, f3 from tbl limit 50 offset 0 
select f1, f2, f3 from tbl limit 50 offset 50 
select f1, f2, f3 from tbl limit 50 offset 100 

등. 오프셋 및 제한을 사용하여 창을 테이블로 제한 할 수 있습니다.

관련 문제