现在在做一个ip黑名单的模块。 当数据为空的时候可以任意添加ip范围,当数据不为空的时候要遍历数据。
例如: 数据库中有1数据  ip开始 0.0.0.2  ip结束 0.0.0.8       我现在表单传来2个数据(开始和结束)(1)若传来的开始和结束值 在0.0.0.2 --0.0.0.8之间 维持原数据
  (2) 若传来的开始和结束值 小于开始 大于结束  例如我传 0.0.0.1 ---0.0.0.9 则覆盖原有数据,数据更新为 0.0.0.1-0.0.0.9
依次类推
先疑惑的是 数据库中有N条数据       0.0.0.1 -------0.0.0.8
  192.168.90.0 ---------192.168.90.12      
   ....................
  
如何遍历后知道那条数据应该可以修改 那条不能修改呢。   此表中 ip开始和结束位联合主键   

解决方案 »

  1.   

    数据库里面写个函数
    function compare(IN startIP1 varchar,IN endIP1 varchar,IN startIP2 varchar ,IN endIP2 varchar)
    return flag boolean//判断情况1:startIP2>startIP1 and endIP2<endIP1 包含,不需要更新
    //判断情况2:startIP2<startIP and endIP2>endIP1 有交集,需要更新返回true or false外面写存储过程,用一个cursor游标遍历数据库记录,依次调用上面写好的函数,返回true就更新,返回false就继续这种业务逻辑一般不要用java来写,效率很低,涉及大量的字符串比较和从数据库取数据到集合的操作