我试图为我的项目创建一个分页,但是,当我尝试从java代码执行查询时,为了获取搜索的基于关键字的行,我得到0行。但是mysql数据库中仍然存在多行。
我试过mysql查询,如:SELECT SQL_CALC_FOUND_ROWS * FROM books where keyword like '%java%' limit 1,5;
此查询给出了0个结果。
尝试时
SELECT SQL_CALC_FOUND_ROWS * FROM books where keyword like '%java%' limit 5;
这将给我1个结果,因为我有一行对应于关键字。但如果结果超过5,那么它不会显示更多5个结果,我想用它来控制从数据库中检索的页面。
任何人都可以帮忙。
答案 0 :(得分:1)
的含义
limit 1, 5
是, 选择第二行,如果找到则总共有5条记录。
但在您的情况下,对于搜索条件,因为只存在一条记录,并且 你想要从第2到第6条记录,总共5条记录,结果是空的。
更改:
limit 1,5;
致:
limit 0, 5; -- to fetch first 5 records from the found
或者
limit 5; -- to fetch first 5 records from the found
要查找找到的记录总数,您需要执行
select found_rows()
与SQL_CALC_FOUND_ROWS
一起使用。
操作顺序应为:
SELECT SQL_CALC_FOUND_ROWS * FROM books where keyword like '%java%' limit 5;
SELECT FOUND_ROWS();
第二个SELECT
返回一个数字,表示如果没有SELECT
子句,第一个LIMIT
将返回的行数。
答案 1 :(得分:1)
如果要使用mysql实现分页,则应考虑使用带有占位符的预准备语句。 E.g。
SELECT SQL_CALC_FOUND_ROWS * FROM books where keyword like ? limit ?,?;
然后绑定参数。 E.g。
PreparedStatement ps = con.prepareStatement(
"SELECT SQL_CALC_FOUND_ROWS * FROM books where keyword like ? limit ?,?");
int firstRow = 1;
int pageSize = 5;
ps.setString(1,"%java%");
ps.setInt(2, firstRow);
ps.setInt(3, pageSize);
的“限制”部分的更多信息