我有我的數據庫中的3條記錄(用於測試目的),我正在使用SQL_CALC_FOUND_ROWS返回與LIMIT結合的行數來收集分頁結果。MySQL Found_Rows()返回雙正確值
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。爲什麼數字翻倍,我做錯了什麼?
UPDATE
我結束了使用此:
int count = namedParameterJdbcTemplate.queryForInt("SELECT Count(*) FROM contacts WHERE contacts.organizationId = :organizationId", namedParameters);
基本上,因爲我是做之前,但SQL變化不大相同。我現在使用count而不是SQL_CALC,我認爲這會導致兩個單獨的查詢,但對於Spring來說,它似乎是唯一的方法。