2012-03-30 133 views
5

我正在使用Spring JdbcTemplate接口從MS SqlServer數據庫獲取數據。 在我看到的文檔中有setMaxRows()方法來爲所有查詢設置一個限制,但是如果我只想限制一個select,該怎麼辦?Spring JdbcTemplate:如何限制選定的行?

有沒有辦法以「可配置」的方式爲特定的調用查詢設置限制?

+0

對於這些語句使用自己的PreparedStatementCreator並在創建預準備語句時調用Statement.setMaxRows()會怎樣? – 2012-04-03 08:39:41

+0

@a_horse_with_no_name這似乎是一個好主意,你能否給我提供一些使用'PreparedStatementCreator'的例子,我是Spring的新手...... – davioooh 2012-04-03 10:33:19

+1

我是Spring的新手,否則我會用一個例子添加一個答案: ) – 2012-04-03 11:30:38

回答

2

限制特定查詢的結果集可以通過將限制直接放入查詢來完成。請諮詢您的數據庫供應商文檔以查看它是否支持例如LIMIT

例如在MySQL的:SELECT * FROM EMPLOYEE LIMIT 10

+0

或者在Oracle的情況下,SELECT * FROM EMPLOYEE WHERE ROWNUM <10'。 – adarshr 2012-03-30 10:53:51

+0

@jabal是的,我知道,但在我的方法實現中,限制是可選的,所以,如果必須直接使用SQL限制查詢,則必須編寫兩個不同的查詢... – davioooh 2012-03-30 10:58:01

+0

在這種情況下,我通常會構建在我的代碼中處理「限制或不限制」情況的查詢字符串,然後執行它。我不知道一個更好的解決方案,好奇如果有人.. :-) – jabal 2012-03-30 11:02:28

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的從表,錶行。