最近在做一个项目,要求流水号自动增长,并且不能并发,中间如果服务器中断的的话,重启后流水号还是累加,第二天从零开始计数。希望各位大侠给点思路

解决方案 »

  1.   

    在数据库中建一个表,有日期和最大号
    写一个synchronized的方法,
    如果数据库中没有今日的最大号,那添加一条数据。存上今日和初始号。
    如果数据库中有今日的最大号,则取出最大号+1,再update
      

  2.   

    我们做过一个项目 也记不大清,大致思路:oracle中建个sequence计数器,自动累计加1;流水号就是当天日期+sequence数值!设置一个最大值
    -- Create sequence 
    create sequence LOT_NO
    minvalue 1
    maxvalue 999
    start with 391
    increment by 1
    cache 10
    cycle;
      

  3.   


    意思就是给数据库里加表,
    以前我们做的时候用的quartz 定时 让每天晚上0点  
    初始化sequence表中的累积字段 让从0开始  格式就是:日期+sequence流水号这个表中你可以让用户设置:编码前缀、流水号长度、起始值 等
      

  4.   

    create table serial_number(
    c_date date,--放日期
    c_number number --放流水号
    )
    这个库里只放一条数据  当天日期和使用到的流水号
    首先从数据查出这条记录,判断日期是否和当前日期相同,相同则拿流水号使用,并更新表中流水号+1
    如果不相同就更新表中日期为当前日期,且把流水号改为1
      

  5.   

    至于第二天重新开始,那就是在JAVA中实现了:
    String number = "";
    String _str_date = MiscUtils.timestampToString(new Date(), "yyMMdd");
    ···
    sql = "select * from inv_lot_trans v where v.issue_number like '%_str_date%'"
    ···
    if (resultSet.next()) {
            int temp = resultSet.getInt(1);
    number = (temp + "").substring(1);
    } else {
    number = "001";
    }
    写的不大详细~
      

  6.   

    这个表:ID:模块名  我们是一个业务一个编码规则
    前缀,流水号长度,起始位数,编码方式(年编码,月编码,日编码)简单的这些就够了具体的 你去哪个项目网站看效果,www.yunji99.com 点击免费使用  》  然后进去时导航  在导航上选:系统设置  》  然后再选:业务编码规则我们做的比较全,你看你的需求了
      

  7.   

    如果用java生成的话,可以这样,在生成订单号的时候就是"日期+序号"
    如果订单一天内不会大于10000
    首先查询今天的订单号最大的一个,如果没有,设置一个初始值(日期+序号)201203220001
    如果有的话把这个订单好变成数字类型+1生成第二个订单号.
    例如当前日期最大订单号为"201203220777"变成数字类型加1为"201203220778"
    还是比较简单吧
      

  8.   

    我用的是hibernate,怎么查询这条记录并遍历出来能给点代码吗
      

  9.   

    String number = "";
    String _str_date = MiscUtils.timestampToString(new Date(), "yyMMdd");
    ···
    sql = "select * from inv_lot_trans v where v.issue_number like '%_str_date%'"
    ···
    if (resultSet.next()) {
       int temp = resultSet.getInt(1);
     number = (temp + "").substring(1);
    } else {
     number = "001";
     }
      

  10.   

    就是 很简单的key=value的prop文件就可以
    读写文件内容加上同步 就可以避免并发问题
      

  11.   

    //一个线程循环   后面的就要你存到会话中去  调用一次存一次取一次
    public class PowerUtil implements Runnable  {  public void run() { 
             synchronized(this) { 
                  for (int i = 0; i < 5; i++) {
                       Thread.currentThread().getName();
                       System.out.println(" synchronized loop " + i); 
                  } 
             } 
        } 
        public static void main(String[] args) { 
         PowerUtil t1 = new PowerUtil(); 
             Thread ta = new Thread(t1, "A"); 
             ta.start(); 
        }}
      

  12.   

    从数据库读取多方便,select row_number() over (order by id) as rowNum...