gpt4 book ai didi

java - MySQL Found_Rows() 返回正确值的两倍

转载 作者:行者123 更新时间:2023-11-30 23:31:38 29 4
gpt4 key购买 nike

我的数据库中有 3 条记录(用于测试目的),我使用 SQL_CALC_FOUND_ROWS 结合 LIMIT 返回行数以收集分页结果。

SELECT SQL_CALC_FOUND_ROWS * FROM contacts WHERE contacts.organizationId = :organizationId LIMIT 0, 1

我正在使用 Spring 来做我的数据库业务登录。

public List<Contact> findAll(int organizationId, int rowStart, int rowAmount, final boolean deep) {
final HashMap<String, Object> namedParameters = new HashMap<String, Object>();
namedParameters.put("organizationId", String.valueOf(organizationId));
namedParameters.put("rowStart", rowStart);
namedParameters.put("rowAmount", rowAmount);
final NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);

List<Contact> contactList = transactionTemplate.execute(new TransactionCallback<List<Contact>>() {

@Override
public List<Contact> doInTransaction(TransactionStatus status) {
SqlRowSet result = namedParameterJdbcTemplate.queryForRowSet(SQL_FIND_ALL_BY_ORGANIZATION_ID, namedParameters);
int count = namedParameterJdbcTemplate.queryForInt("SELECT FOUND_ROWS()", (HashMap<String, ?>) null);
System.out.println(count);
List<Contact> contactList = mapContact(result, deep);
if(contactList.size() > 0) {
return contactList;
} else {
return null;
}
}

});
return contactList;
}

无论我做什么,当我在表中只有 3 行时,计数返回为 6。事实上,无论结果集中有多少行,它都会返回 6。为什么数字翻了一番,我做错了什么?

更新

我最终使用了这个:

int count = namedParameterJdbcTemplate.queryForInt("SELECT Count(*) FROM contacts WHERE contacts.organizationId = :organizationId", namedParameters);

基本上和我之前做的一样,只是SQL有点变化。我现在使用的是计数而不是 SQL_CALC,我认为这会导致两个单独的查询,但对于 Spring,这似乎是唯一的方法。

最佳答案

看起来像是使用 SqlRowSet 的副作用.也许 JDBC 驱动程序会在内部发出一些查询来支持它。

如果您不需要 SqlRowSet 的特定功能最好使用更传统的方法。比如用RowMapper<Contact>会更好查询 List<Contact> .

关于java - MySQL Found_Rows() 返回正确值的两倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10297955/

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