问题是这样的:
现在需要一个编号 , 编号规则为当天日期+随机号,随机号为从 1 开始到 999自动增长,
比如 今天是2010年1月11 号,那么今天的 第一个编号就为 20100111001 ,第二个为20100111002 依次类推,今天最大是编号为20100111999,
明天 的第一个编号是20100112001 第二个是 20100112002 依次向下 最大是是20100112999
不知道该怎么写了,有做过类似的吗?或者简单说一下思路,指点一下,谢谢了
我是这样想的 ,如果我在数据库建个序列,从1开始增长到,然后在类中调用这个序列,在前面加上当天的日期,
可是 这个序列第二天不是从1开始的了,不知道怎么解决了
http://www.iteye.com/topic/421840 这个上面的看了,但是还不知道该怎么做
如果数据库是ORACLE直接用sequence就可以了,搞个job实现按天重启序列号
每天产生999个编号保存在一个队列中。需要的时候直接从队列中获取。
把编号和日期都保存下来,每次取的时候都判断一下是不是一个日期,这没有什么问题。
你觉得这个问题难以编程是因为你没有缩小到你的不确定性为可编程状态。
你描述的这个问题,可编程状态明显需要保存如下2个变量
1.当前号码 mark_number
2.产生当前号码的日期。mark_date
if(mark_date==current_date){
mark_number++;
}else{
mark_date=current_date;
mark_number=1;
}
可以用一个number.properties文件作存储(日期为key,流水号为value)
比如2010年1月11日,产生的最大序列为998
那么number.properties的内容为
#file:number.properties
20100111=998
到了第二天2010年1月12日,先读取这个properties,以20100112为key去取,取不到的话则值为1
并向这个number.properties更新
更新后内容为:
#file:number.properties
20100111=998
20100112=1
依次类推,不需要借助数据库啊 呵呵
思路:
很显然你的这个编号,不能用序列去完成的。如果可以那你一定很高明!
这个编号是时间(date)+自曾(number)的。
日期好办 系统日期不管是什么样的数据库都可以取当前日期的。
从001到999 ,最大的不能超过999,无论你怎么去生成这个编号,在这个地方都要去判断吧 如果大于999了就不让生成了。那你就得有一个步去取数据库中最大的那一个了。数据已经为999了 那只有不让生成了。这是其一。
其二,就是如何去生成这样的编号。
如果你是要在项目程序中完成,比较好办。取得date+随机数(这个我想你应该会的吧) 然后组成一个sql语句 对数据库进行操作。
如果你要在数据库中完成,可以用存储过程。同样提取系统date + 自曾(这个要自己去完成它,如果是用Oracle的,更好办了,有很多方式),然后组成一个sql语句对数据库进行操作。
如果还不明白,请提出来,继续解答!! 这是个很简单的思路!