2012-03-30 1 views
5

Я использую интерфейс Spring JdbcTemplate для извлечения данных из базы данных MS SqlServer. В документации я вижу, что существует метод setMaxRows(), чтобы установить ограничение для всех запросов, но что, если я хочу ограничить только выбор?Spring JdbcTemplate: как ограничить выделенные строки?

Есть ли способ установить ограничение только для определенного вызванного запроса в «настраиваемом» виде?

+0

Как использовать собственный документ PreparedStatementCreator для этих операторов и вызывать Statement.setMaxRows() при создании подготовленного оператора? –

+0

@a_horse_with_no_name, что кажется отличной идеей, можете ли вы предоставить мне пример использования 'PreparedStatementCreator', я новичок в Spring ... – davioooh

+1

Я новичок в Spring, иначе я бы добавил ответ на пример:) –

ответ

2

Ограничение набора результатов для конкретного запроса может быть выполнено путем помещения ограничения непосредственно в запрос. Обратитесь к документации поставщика БД, чтобы узнать, поддерживает ли она, например, LIMIT.

Пример на MySQL: SELECT * FROM EMPLOYEE LIMIT 10

+0

Или 'SELECT * FROM EMPLOYEE WHERE ROWNUM <10' в случае Oracle. – adarshr

+0

@jabal Да, я знаю, но в моей реализации метода ограничение является необязательным, поэтому, если вам нужно ограничить запрос напрямую с помощью SQL, вам нужно написать два разных запроса ... – davioooh

+0

В таких случаях я обычно создаю строка запроса в моем коде обрабатывает случаи «лимит или без ограничений» по-разному, а затем выполняет ее. Я не знаю лучшего решения, любопытно, если кто-то делает .. :-) – jabal

4

Некоторые SQL на основе языков запросов (котелок) не поддерживает LIMIT ключевое слово. Поэтому вы не можете напрямую использовать LIMIT в запросе. Использование Spring 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, какой список строк из таблицы.

 Смежные вопросы

  • Нет связанных вопросов^_^