我现在有这样一个需求,数据库中有一个字段 是需要累加的例如:这个字段有一个值是001 下次我需要这个字段的值是002
 
再取下一个就是003这样递归的增长 最大值到999 这个用java怎么实现呀?
急用谢谢了!  

解决方案 »

  1.   

    你的意思是每次取出时加一,是不?你要在数据库中设置一下这个字段的check值,使其最大为 999
    然后取出值照样,但取出之后加个update tb set x = x+1 where .....;
    你再想想
      

  2.   

    就是 假设 数据库现在有 一条记录 A 他的一个字段值是001 我再添加一条记录 B 就需要取 A 记录的 001值
    在这个值的基础上 加一  就是002  这个用java怎么实现
     
      

  3.   

    自增长主键?在数据库层面可以设置
    用java做干嘛?并不好做。
      

  4.   

    这个字段的例子应该是这样的 TEXT2008HAW-027  每次必须取出来 把后面的 027 加一
    然后生成 TEXT2008HAW-028 因为前以部分是不变的  我现在截取字符串后剩下 027  现在怎么实现
    这一部分的递增, 
      

  5.   

    因为业务关系不能用那个那个实现 需要用java去实现 
    这个字段的例子应该是这样的 TEXT2008HAW-027  每次必须取出来 把后面的 027 加一
    然后生成 TEXT2008HAW-028 因为前以部分是不变的  我现在截取字符串后剩下 027  现在怎么实现
    这一部分的递增,
      

  6.   

    假设你的表名为:MAXKEY、最大号记录字段为:MAXVALUE
    你写一个主键生成类,在该类中按照取得主键调用顺序加入以下几个方法:
    //首先在你的数据源上开始事务,下面整个过程全部是一个事务:
    //其次锁定你的表记录行:
    private void lock(Connection connection, String tableName, String 其他条件) throws Exception {
        String updateStr =
            " UPDATE MAXKEY SET MAXVALUE=MAXVALUE WHERE tableName=? AND 其他条件=?";//行级锁
        PreparedStatement stmt = connection.prepareStatement(updateStr);
        stmt.setString(1, tableName);//用这个表名为区分可以为多个表保存最大主键
        stmt.setString(2, 其他条件);
        stmt.execute();
        stmt.close();
    }
    //然后:
    String query =
              "SELECT MAXVALUE FROM MAXKEY WHERE tableName=? AND 其他条件=?";
          PreparedStatement stmt = connection.prepareStatement(query);
          stmt.setString(1, tableName);
          stmt.setString(2, 其他条件);
          ResultSet result = stmt.executeQuery();
    //最后插入或者更新最大号字段:
          if(!result.next()){//如果最大号表没有该表的最大号则插入...
            //生成001并插入:
            this.insert(connection, "001"...);//这个就不写了...
          }else{//如果最大号表有该表的最大号则更新...
                   //从result中取到MAXVALUE并转换为数值、加一、然后更新、就不写了...
                  }
     stmt.close();
    //提交整个事务...至于你最大号的限制你可以写个保存参数的接口静态成员保存或者别的...
      

  7.   

    还剩insert和update方法,最简单的插入更新,楼主根据你表结构自己写即可。
    总之这些方法都在一个事务内顺序调用,保障你表中的最大号不会出现脏数据或者跳号。
    至于从数据库查询出字符串、转换为数值、加一这个过程很简单的吧。
      

  8.   

    TEXT2008HAW-027增长为TEXT2008HAW-028 :String key = "TEXT2008HAW-027";
    String temp = key.split("-")[1];
    temp = Long.toString(Long.parseLong(temp) + 1);
    key = key.split("-")[0] + temp;
      

  9.   

    如果一定要这样的话 就用 
    select max(...) from ... 
    取出这个字段的最大值
    +1 或-1 就自己弄了