我有一个看似简单的问题,但无法弄清楚或在网上找到解决方案。我正在做的是编写一个DAO方法来获取帐户下的用户。我包含参数来过滤和命令我的查询。涉及到不同的表,我的查询使用内部联接,左外部联接...。并不重要。重要的是,我想知道我的查询返回了多少行,即使在限制之后(总数不受限制)。这是我方法中的一些代码..
List<User> users = new ArrayList<User>();
UserRowCallbackHandler userHandler = new UserRowCallbackHandler(accountId);
String query = null;
if (limit == -1) {
query = String.format("%s\nORDER BY %s",
sqlXml.getQuery("GET_USERS_BY_ACCOUNT_ID"),
orderBy);
} else {
query = String.format("%s\nORDER BY %s \nLIMIT %d, %d\n",
sqlXml.getQuery("GET_USERS_BY_ACCOUNT_ID"),
orderBy, offset, limit);
}
getJdbcTemplate().query(
query, userHandler,
accountId, filter);
users.addAll(userHandler.getUsers());
我可以添加到查询中(或者如何利用我的JbdcTemplate对象)查看查询返回的总行数,即使在限制后也是如此
答案 0 :(得分:0)
好的,我对我的解决方案不是很满意,但它现在有效。答案是我将不得不运行3个查询,我想这不是一个问题,但我希望只运行一个查询。
答案是运行初始查询(没有限制)并在之后立即运行第二个查询(SELECT FOUND_ROWS())。然后运行指定限制的第3个查询。我想如果没有指定限制我只需要运行两个查询,但我使用它来进行服务器端分页,所以几乎总会有一个限制。这是代码
UserRowCallbackHandler userHandler = new UserRowCallbackHandler(accountId);
query = String.format("%s\nORDER BY %s",
sqlXml.getQuery("GET_USERS_BY_ACCOUNT_ID"),
orderBy);
queryForTotal = "SELECT FOUND_ROWS()";
getJdbcTemplate().query(
query,
userHandler, accountId, filter);
filteredTotal = getJdbcTemplate().queryForInt(queryForTotal);
if (limit != -1) {
// re-initialize handler for clean data
userHandler = new UserRowCallbackHandler(accountId);
query = String.format("%s\nORDER BY %s \nLIMIT %d, %d\n",
sqlXml.getQuery("GET_USERS_BY_ACCOUNT_ID"),
orderBy, offset, limit);
getJdbcTemplate().query(
query,
userHandler, accountId, filter);
}