有点标题党哦,呵呵。
在我的之前一篇文章中提到有这样一个方法:
- //这个方法的用途是分页找到类别编号为cno的所有文章
- public ArrayList<Article> queryByCnoPaging(String cno,
- int pageSize,
- int pageNow);
为了能使读者理解,我们来看这样一个例子:
政工信息
|____制度方案 21
|____岗位职责 22
|____荣誉栏 23
|____好人好事 24
|____……
上面这个结构是文章分类,表示政工信息这个大栏目下有制度方案、岗位职责等子栏目,编号cno分别为21、22等。
好了,在回过头来看看queryByCnoPaging这个方法。在参数中,我们只能传入cno,也就是说我们只能查找子类的所有文章,那么要如果要查找所有政工信息中的文章,如何找呢?
聪明的你肯定想到了,写一个方法——甚至你还可以告诉我,就取名为queryByPnoPaging,然后有一个参数为pno,表示父类编号。
那么,我很遗憾的告诉你,在数据库设计阶段没有为article设置pno,即父类编号字段呢?(当然这样的错误也就像我这样的菜鸟会范)。
既然现在已经犯了,就要想办法解决。这里我把我想的一个方法和大家分享。
我的解决办法是在
- public ArrayList<Article> queryByCnoPaging( String cno,
- int pageSize,
- int pageNow);
这个方法上下功夫,因为这样对项目的代码改动最少。(真诚讨教更简单的弥补方法。)
对于这个方法原始方法体,大家可以到这个文章中查看。
我的想法是不改变这个方法的参数列表,如果传入的cno是11、23、33等等,依然按照原来的做法,如果传来的cno是 1、2、3等,说明要查询是父类下面的一些文章了,就要进行一些处理了。做法如下:
- 先新建一个子类cno集合的类,如下:
- package com.rctraffic110.bean;
- /*
- * 所有大类下面的子类,用来保存下面的子类的集合
- * @author nileader
- */
- public class CnoSet {
- public final static String cnoSet1 = "('11', '12' )"; //通告通报的cnoSet
- public final static String cnoSet2 = "('21', '22', '23', '24', '25', '26', '27', '28', '29', '210', '211' )"; //政工信息的cnoSet
- public final static String cnoSet3 = "('31', '32' )"; //事故信息的cnoSet
- public final static String cnoSet4 = "('41', '42' )"; //法制园地的cnoSet
- public final static String cnoSet5 = "('51', '52', '53' )"; //宣传工作的cnoSet
- public final static String cnoSet6 = "('61' )"; //教育训练的cnoSet
- public final static String cnoSet7 = "('71' )"; //中队信息的cnoSet
- public final static String cnoSet8 = "('81' )"; //学习园地的cnoSet
- }
然后改写queryByCnoPaging方法中,
在进行数据库操作之前先进行如下代码执行:
//根据
cno来构造一个子类集合.
- //如何cno是个个位数数字,如:1 那么说明是要找到通知通报下的所有文章,包括 11市局通告和 12大队通告
- String cnoSet = "('"+cno+"')";
- //构造一个通告通报的cno集合
- if("1".equals(cno ) ) cnoSet = CnoSet.cnoSet1;
- //构造政工信息的cno集合
- else if("2".equals(cno ) ) cnoSet = CnoSet.cnoSet2;
- //构造事故信息的集合
- else if("3".equals(cno ) ) cnoSet = CnoSet.cnoSet3;
- //构造法制园地的集合
- else if("4".equals(cno ) ) cnoSet = CnoSet.cnoSet4;
- //构造宣传工作的集合
- else if("5".equals(cno ) ) cnoSet = CnoSet.cnoSet5;
- //构造教育训练的集合
- else if("6".equals(cno ) ) cnoSet = CnoSet.cnoSet6;
- //构造中队信息的集合
- else if("7".equals(cno ) ) cnoSet = CnoSet.cnoSet7;
- //构造学习园地的集合
- else if("8".equals(cno ) ) cnoSet = CnoSet.cnoSet8;
在改写一些sql语句,改成WHERE IN语句,如:
- //计算总页数
- String _sqlTotall ="SELECT COUNT(*) totalNum FROM article WHERE cno IN "+ cnoSet;
OK了。