2012-03-30 4 views
5

저는 MS SqlServer DB에서 데이터를 가져 오기위한 스프링 JdbcTemplate 인터페이스를 사용하고 있습니다. 문서에서 모든 검색어에 대해 한도를 설정하는 setMaxRows() 방법이 있지만 선택 항목 만 제한하려면 어떻게해야합니까?Spring JdbcTemplate : 선택한 행을 제한하는 방법?

"구성 가능한"방식으로 특정 호출 된 쿼리에 대해서만 제한을 설정하는 방법이 있습니까?

+0

이러한 명령문에 대해 자신의 PreparedStatementCreator를 사용하고 준비된 명령문을 작성할 때 Statement.setMaxRows()를 호출하는 것은 어떻습니까? –

+0

@a_horse_with_no_name 좋은 아이디어 인 것 같습니다. PreparedStatementCreator'를 사용하는 예제를 제공 할 수 있습니까? – davioooh

+1

저는 스프링에 익숙하지 않습니다. 그렇지 않으면 예제를 사용하여 대답을 추가했을 것입니다.) –

답변

2

제한에 직접 쿼리를 적용하여 특정 쿼리의 결과 집합을 제한 할 수 있습니다. 예를 들어 LIMIT을 지원하는지 DB 공급 업체의 설명서를 참조하십시오. MySQL을

예 : SELECT * FROM EMPLOYEE LIMIT 10

+0

또는 오라클의 경우 'SELECT * FROM EMPLOYEE WHERE ROWNUM <10'. – adarshr

+0

@jabal 네, 알고 있습니다. 그러나 제 방법 구현에서 한계는 선택 사항입니다. 따라서 SQL을 사용하여 직접 쿼리를 제한해야한다면 두 가지 다른 쿼리를 작성해야합니다 ... – davioooh

+0

그런 경우에는 일반적으로 내 코드에서 "제한 또는 제한 없음"사례를 다르게 처리 한 다음 쿼리 문자열을 실행하십시오. 더 나은 해결책을 모르겠다. 궁금한 점이 있다면 ...-) – jabal

4

일부 SQL 기반 쿼리 언어 (더비는) LIMIT 키워드를 지원하지 않습니다. 따라서 검색어에 LIMIT을 직접 사용할 수 없습니다. 봄 JDBC 템플릿을 사용하여 우리는 setMaxRows(Integer intvalue)

jdbcTemplate.setMaxRows(1); 
1

쿼리 당신은 수도 사용자 제한 키워드를 통해 필요한 행의 최대 수를 설정할 수 있습니다. 응용 프로그램 제한의 경우 쿼리

select * from FileShare limit 3 offset 3 

아래 참조 및 쿼리

@Autowired 
private JdbcTemplate template; 

public JdbcTemplate getTemplate() { 
    return HibernateUtil.getJdbcTemplate(); 
} 

public List<FileShare> getAllSharedFiless(int limit,int offset) 
      throws ShareMeException { 
String query="select * from FileShare limit ? offset ?"; 
     return getTemplate().query(query, 
       new SharedFilesRowMapper(), 
       new Object[]{limit,offset}); 

} 
다음

FileShare 아래에 사용자가 동적으로 사용을 할당 할 수있다 옵셋 테이블 이름이고 SharedFilesRowMapper은 RowMapper의 테이블에서 목록 행입니다.