顺序生成编号

编号 名称
1001 a
1002 a
1003 a
1004 a
1005 a
......
1099 a

上面的数据表。
编号的后两位是有规定的。
01 。。 99 满了就不能再插入数据了。
但如果有数据被删除了。。比如编号为 23,33

我们又可以使用这两个号码,必须先用小的, (即使号码没到99,中间有数据被删除了,要使用包括删除号码的最小号码)

有没有好点的生成新编号的方法。谢谢。

java

TreeSet _treeset = new TreeSet();定义 一个1到99的TREESET

TreeSet _treeseta = new TReeSet();//数据库里取出来的

_treeset.removeAll(_treeseta);//_treeset就是剩下的了(并且这些剩下的可以有序的,你可以从头拿取)

定义一个TREESET,值为1-99,按从小到大顺序排序,
然后将数据库里已经有的值拿出来
跟这个TREESET取差集后的TREESET。
添加数据每次要取序号时就从这个TREESET里的头部取值,然后删除TREESET里的值;
删除数据库表值时就把删除的ID资源再放回这个TREESET里
这样每次取到的ID都是从最小的值里取到的,直到TREESET为空表示可用的资源ID已经用光

可以再建一个数据库表么?
表里就2个字段,编号和是否可用
[code="sql"]
select min(编号) from 表 where 是否可用=可用;
[/code]

如果数据表是oracle 可以直接用sql得到缺失的编号:

[code="sql"]select t.* from tb t[/code]
[align=left] sn
1
2
4
6
8
13
14[/align]
[code="sql"]SELECT DISTINCT s + LEVEL - 1 miss_no
FROM (SELECT lag(sn, 1) over(ORDER BY sn) + 1 s,
sn - 1 e
FROM tb)
START WITH e - s >= 0
CONNECT BY LEVEL <= e - s + 1
ORDER BY 1;[/code]

结果:
miss_no
3
5
7
9
10
11

实际上,可以每次CUD之后,可以把下一次可用的值给求出来。

楼上的这个方法靠谱,建立一个表存储可用的信息,在每次操作后,将下次可用的值求出来存储~~