我有一个ID自动,为自动增1,有五条记录:1 2 3 4 5  删除5  再插入一条新记录,记录号为:1 2 3 4 6
请问,如何让新插入的记录,随数据库的记录顺序自动更新

解决方案 »

  1.   

    这个,数据库自动就有字段的选项是自动增加的吧至少oracle和sql server上有,楼主是什么数据库?
      

  2.   

    建个触发器,当新增记录的时候查出最大的Id然后设置当前新增记录的Id为最大ID+1就哦了
      

  3.   

    自增字段无法自动做到你说要求的。自增字段会在数据库中记录当前使用的ID和下一个ID,每次过来取的时候就把下一个ID给你,然后将当前ID和下一个ID加1。
    楼主这种想法使用自增方式的话没有意义。你现在是12346觉得需要12345,那如果是12456,你怎么办,那个3可是无法自动加出来的。所以说不管用自增字段还收手动控制,都会出现类似问题。
      

  4.   

    我用的是mysql数据,本人新手,能给出代码吗?
      

  5.   

    序列是一个数据库对象,序列建立后,当第一次引用时,系统返回序列的初始值,以后每一次对序列的引用都会使用序列的当前值按照设定的增量变化,然后返回一个新值。
    所以即便你把ID为5的记录删除了,再次添加记录时,新的ID是5+1,而不是4+1
      

  6.   

    因为楼主设置表自动+1的字段类型是序列,所以它在插入新数据的时候不会理会之前的数据是否被删,建议改变该字段的类型,然后由程序控制插入数据时候该字段
    select max(id) from tablename;
    插入前查询这一句,获取最大的id,然后+1,赋给要插入数据的id值
      

  7.   

    搞定了:
    如果记录为:123456 无论删除哪一条再插入,都会自动更新,如删除3,插入后仍为 123456,删除6再插入一条,也为123456 追加一条新记录则:1234567代码贴出来 供大家参考下:
    public static List getNextIdInfo(int iId){
    List list = new ArrayList();
    LoginForm loginForm = new LoginForm();
    String sql = "select id from tb_user where id=" + iId;
    try{
    Class.forName(sourse.sDriverName);
    CON = DriverManager.getConnection(sourse.sUrl, sourse.sUserName,sourse.sPassWord);
    STMT = CON.createStatement();
    RS = STMT.executeQuery(sql);
    if(RS.next()){
    loginForm.setId(RS.getInt("id"));
    list.add(loginForm);
    }
    RS.close();
    CON.close();
    STMT.close();
    }catch(Exception e){
    e.printStackTrace();
    }
    return list;
    }

    public static int getNextId(){
    int iNowId = 1;
    int iNextId = 1;
    List list = getNextIdInfo(iNowId);
    while(!list.isEmpty()){
    iNowId = iNextId;
    iNextId ++;
    list = getNextIdInfo(iNextId);
    }
    return iNextId;
    }
      

  8.   

    自己创建一个方法获取最大的ID,然后每次增加时就maxID+1,这样也可以实现的哦!