数据库设计出错?照样能“牛转乾坤”!

         有点标题党哦,呵呵。

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

 

OK了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值