在mysql查询中使用带有like关键字的limit给出了0行

时间:2014-03-16 18:05:42

标签: java mysql sql database

我试图为我的项目创建一个分页,但是,当我尝试从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个结果,我想用它来控制从数据库中检索的页面。

任何人都可以帮忙。

2 个答案:

答案 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将返回的行数。

请参阅MySQL: Found_Rows()

答案 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);

有关http://dev.mysql.com/doc/refman/5.5/en/select.html

的“限制”部分的更多信息