[英]Get number of rows returned from query with JdbcTemplate
我有一个看似简单的问题,但无法解决或在线找到解决方案。 我正在做的是编写一种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对象)以查看查询返回的总行数,即使在限制之后也可以?
好的,我对我的解决方案不是很满意,但是目前可以使用。 答案是,我将必须运行3个查询,我想这不是什么大问题,但我希望只运行一个查询。
答案是运行初始查询(无限制),然后立即运行第二个查询(SELECT FOUND_ROWS())。 然后运行指定限制的第三个查询。 我想如果没有指定限制,我只需要运行两个查询,但是我使用它来进行服务器端分页,因此几乎总是有一个限制。 这是代码
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.