Showing posts with label sql. Show all posts
Showing posts with label sql. Show all posts

2007-03-25

java.sql.SQLException: java.lang.NegativeArraySizeException

有段java程序, 通过jdbc调用mysql的
在执行分页查询的时候, 如果是这么写:
select * from orders limit 1, 30;//第一页的30条
没有任何问题.但是把它放到存储过程里(参见前一篇文章), 就会出那个exception,只要是页不满的情况都会报exception.但是有个特别的现象, 如果你把orders表清空, 然后执行java, 不会报错, 只有当行数大于某个值并且页不满才会报Exception.

非常不明白....
相对详细的代码在这:link

2007-03-24

mysql的分页存储过程

一般的分页面可以这样直接写在sql里面:

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