gpt4 book ai didi

java - 使用 JdbcTemplate 获取查询返回的行数

转载 作者:行者123 更新时间:2023-11-29 18:10:09 25 4
gpt4 key购买 nike

我有一个看似简单的问题,但无法弄清楚或在网上找到解决方案。我正在做的是编写一个 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);
}

关于java - 使用 JdbcTemplate 获取查询返回的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47476128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com