我用SQL2000+JBulider编写一个JSP分页;
  JSP只显示,分页在数据库中实现.
  开始的时候是用的方法太搞笑了,就是每次TOP行数,然后在rs.next中一个判断取出所要的部分。但是要是数据上万行就太不合理了.......~T_T~
  我在网上找了一些方法,方法1.(ID大、小于和 SELECT TOP)  方法2.(NOT IN 和SELECT TOP)  方法3.(用游标存储过程实现)
  首先说明:我现在不会用第3中方法.
  我现在谈一下自己的理解和想法.
  我的分页是在3个表联接查询后进行的。比如表A,B,C,当然也可以假设为2个表。
A表和B表是‘多对一’关系(即A表的外键是B表的主键)。B表中的'主键'可以在A表中'有'或'无'.当他们进行左连接查询的时候(A left outer join B),可能出现为'NULL'的字段.
  这样用方法一就不好判断了。
  我在用方法2的时候,在后面条件上我加了句 'or A.ID is null'.开始觉得还好,但是当‘NULL’字段的行数多的时候,问题就来了。至于显示多少行和多少页这些还是能判断的(行,页的判断是另一个方法)。就是在传到JSP页面的时候,随着'NULL'字段行数的增加,显示也就出问题了。(比如:一共10页,含有'NULL'字段行是从第5页开始的,后面的全为'NULL'字段行,前面的几页没问题。不管怎么选‘下一页’,还是点击跳转到(大于5的)页面,JSP页面总显示在第5页,后面的就不显示了)。
  我的语句是这样些的“select top 页数*行数 a.id,a.name,b.name,b.id from a Right Outer JOIN b on a.b_id=b.id where( a.id NOT IN (SELECT TOP (页数-1)*行数 a1.id FROM a Right Outer JOIN a on a1.owner_id=b1.id ) or a.id is null)”.
  我用的是3个表,第3张表只是内联接了A表中的A.ID,这里我只把2个主要的表中主要字段给写上.我想语法错误应该没有,就是 TOP,NOT IN 这种结构下来的。于是出现了上面我说的情况,后来我又想改一下,改的头都大了也没实现。
  我就是想如何把含'NULL'的字段行给一页一页的显示,因为:如果没有'NULL'字段的话就比较好弄了。
  也许我这种办法根本就是不合理或着是我一直在钻死角,毕竟一个人的想法太狭隘了,在这里把自己的想法跟大家说下,那位大侠给解决一下啊,谢谢~~,非常感谢!!!。
  大家有什么好的方法可发到[email protected],最好给个比较完整的代码,毕竟本人菜~!
  我现在就想了这么多,还有什么要求的话,我再修改。
  帐号注册了也没用,分就是注册时候给的,如果大家不介意,先欠着大家的。
  再次感谢!!!

解决方案 »

  1.   

    最傻瓜的解决方法是用hibernate,这种已经将逻辑写好了纯写sql的话觉得第二种不错,平时用的也不较多
      

  2.   

    hibernate
    这个我也不懂啊,有没有纯写SQL的,用来实现我的要求的~~
    谢谢~~~
      

  3.   

    用hibernate+struts分页多方便呀!
      

  4.   

    真的没人吗?
    谢谢上面说的方法,高级的我现在不会.
    就想用SQL语句来分,
    还有就是按我的那种想法去分
      

  5.   

    我的办法先将所有数据查到List中,再对list进行分页显示,很方便,速度快