有段java程序, 通过jdbc调用mysql的
在执行分页查询的时候, 如果是这么写:
select * from orders limit 1, 30;//第一页的30条
没有任何问题.但是把它放到存储过程里(参见前一篇文章), 就会出那个exception,只要是页不满的情况都会报exception.但是有个特别的现象, 如果你把orders表清空, 然后执行java, 不会报错, 只有当行数大于某个值并且页不满才会报Exception.
非常不明白....
相对详细的代码在这:link
Showing posts with label sql. Show all posts
Showing posts with label sql. Show all posts
2007-03-25
2007-03-24
mysql的分页存储过程
一般的分页面可以这样直接写在sql里面:
表示每页显示20个, 第3页.这种写法不能通过PreparedStatement执行, 因为它是编译过的, 存储过程同理.所以这样写不会成功:
应该算是mysql的bug.
有个折衷的办法:
link, link
select * from test limit 3, 20;
表示每页显示20个, 第3页.这种写法不能通过PreparedStatement执行, 因为它是编译过的, 存储过程同理.所以这样写不会成功:
create procedure pager (in pno int, in psize int)
begin
declare pp int default 0;
set pp = (pno - 1) * psize;
select * from pager limit pp, psize;
end
应该算是mysql的bug.
有个折衷的办法:
create procedure pager (in _pno int, in _psize int)
begin
prepare stmt from "select * from test limit ?,?";
set @pno = (_pno - 1) * _psize;
set @psize = _psize;
execute stmt using @pno, @psize;
end
link, link
Subscribe to:
Posts (Atom)