java如何至数据库检测重复值?

背景:我有一个需求是从01按序列递增编码,但是数据库里已经存在编码(如存在10,11),想要实现遇到数据库存在的编码就跳过往下递增(如到9之后检测到存在10,11则生成12)
思路:我先利用循环生成数字,然后把数字拿到数据库查询,有就跳过继续循环,没有就输出结束循环
问题:我是利用循环生成的结果作为查询的条件,然后根据数据库的结果集rs是否为空判断循环,这个循环怎么写?

其实 你可以用分组查询,将相同的数据进行分组,这样你就把同样的数据去重了,查出来的就是唯一的数组。

int getNo(){
     int i=1;
     boolen f=true;
     while(f){
     int c=count(i)//查询数据库是否 存在编码 i
     if(c>0) f=false
     }

 return i;
 }

补充下,循环里 最后 i++

public void checkNumInDb(int id) {
    for (int i = 1; i < 100; i++) {
        if (selectId(i) > 0) {// 说明数据库中有结果
            System.out.println("数据库存在" + i);
        } else {
            System.out.println("数据库中不存在" + i);
            // 可以添加进数组
        }
    }
}

public int selectId(int id) {
    int row = 0;
    // TODO 具体数据库查询的动作

    return row;// 可以返回查询的结果行数
}

从数据库获取id,如果id存在则i=id+1,如果不存在则i=i+1。
还有一种方法就是:

 if(rs.next()!=null){
 i++;
     }else{
        id==i;
     }

你这么循环比对数据库,性能非常低下,如果中间隔了10000个数据 你的程序性能会崩溃的 亲 。

这类问题正确的思路是:单独建立一个编码规则表,插入数据时,从编码规则表中取数据,更新编码表

不要检测重复的,效率太低

思路可行,但是有问题,你每循环一个数字都查一次数据库,影响性能。如果已存在的量不大,你可以一次性将数据库中已经存在的编码查出来,放入一个list集合中,在循环遍历时,和list集合比,存在则跳过,不存在则往数据库加。如果数据量很大,应该就不会存在这样的业务问题了,因为表设计时会就解决这样的问题的

这种方式效率极低,可以考虑在数据库中建一个补号表,如果数据库中id已经有1、2、3、5这四个了,补号表里就存储4,之后往数据库插入数据的时候先看看补号表中有没有数据,有的话从补号表中获取id,保存成功之后把补号表中的这个id删除,如果补号表没有数据就取数据库中最大的id+1就是新录入的数据的id就可以了。

比如你通过getNewList()方法得到一个List nameList集合,该nameList 存放着从数据库中查询的name,现在统计name有多少次重复:
Map resultMap = new HashMap();
for(int i = 0; i < nameList.size(); i++){
String tmp = nameList.get(i);
int count = resultMap.get(tmp) != null ? resultMap.get(tmp) : 0;
count = count + 1;
resultMap.put(tmp, count);
}
resultMap中的key就是不同的name,有多少个key,就有多少个不同的name,其value就是每个name重复的次数。

新new一个list,没查到添加到集合,查到不添加不就好了

没那么复杂 你可以借鉴下 微信的三点定位, 也叫三圆定位, 这个百度有介绍理论的, 基于rssi的三点定位算法 你也可以百度看下。里面介绍的也很详细。往采纳!

如果用的是mysql,insert or ignore 就可以解决你这个问题。没的话插入,有的话忽略

为何不根据数据库对应表内的最大值,创建一个max+1的序列直接调用呢