2012-03-30 138 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的从表,表行。