获得一个不相同的编号,不重复

lijiark1988 2009-11-18 10:49:14

在登记一个人的时候 要给此人发配一个编号 在未提交的时候 数据库不能有数据 而且编号是字符串 不是自动增长列

当编号10001进来的时候 给它发一个编号
当编号10002进来的时候 给它发另一个编号 编号不相同 代码控制 可以查数据库

如果10001不插入数据 那么10001这个位置就空下来 数据库不能又重复

...全文
242 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
heroboy0923 2009-11-19
  • 打赏
  • 举报
回复
jdk1.5以后自带一个uuid的类, 全名是java.util.UUID,UUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成,表现出来的形式例如
550E8400-E29B-11D4-A716-446655440000,如果一台机器每秒产生10000000个UUID,则可以保证(概率意义上)3240年不重复
代码也很简单
  import java.util.UUID;
  public class TestUUID {
   public static void main(String[] args) {
    UUID uuid = UUID.randomUUID();
    System.out.println (uuid);
   }
  }
磊磊崔 2009-11-19
  • 打赏
  • 举报
回复
public String generateData() {
Date date = new Date();
String value = date.getTime();
return value;

}
苍蝇①号 2009-11-19
  • 打赏
  • 举报
回复
用java.util.UUID
caryyu 2009-11-19
  • 打赏
  • 举报
回复
按时间 毫秒数 取值
产生随机值
wifewifewife 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 crazylaa 的回复:]
oracle的:
create SEQUENCE seq_sms_id increment by 1 start with 1 maxvalue 9999999999 cycle;
[/Quote]
是这样的呢.我公司就是用这种方式.感觉这种方式非常好.
wxzyydy 2009-11-19
  • 打赏
  • 举报
回复
ding
bawgiitx 2009-11-19
  • 打赏
  • 举报
回复
实现不行自己字义一个新表{对应表名,标识},添加触发器,每次查询时自动 标识+1
starsong 2009-11-19
  • 打赏
  • 举报
回复
不用sequence对象的话,可以考虑自己建立一张表,记录当前最大编号,每次使用的时候取最大加1
zhouyongyang 2009-11-19
  • 打赏
  • 举报
回复
像我们做项目都是这么做的
zhouyongyang 2009-11-19
  • 打赏
  • 举报
回复
如果楼主不想用自动增长列的话,,,就把ID值设为当前时间(毫秒表示)的前8位就行了,决对不会有重复的
crazylaa 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 heroboy0923 的回复:]
jdk1.5以后自带一个uuid的类, 全名是java.util.UUID,UUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成,表现出来的形式例如
550E8400-E29B-11D4-A716-446655440000,如果一台机器每秒产生10000000个UUID,则可以保证(概率意义上)3240年不重复
代码也很简单
  import java.util.UUID;
  public class TestUUID {
   public static void main(String[] args) {
    UUID uuid = UUID.randomUUID();
    System.out.println (uuid);
   }
  }
[/Quote]

长见识了,up。
但这个串似乎太长了点。。。。不方便格式化。
btw:弱弱的问一句,连续取几个,不知道能不能看出递增的关系。
crazylaa 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zl3450341 的回复:]
sqlserver的话  ID设置为自动增长啊
[/Quote]
他要插入前先分配好,可能还要对这个唯一值进行格式化,如前面加字符啥的。。。。

各位还有啥好主意啊我也想知道
老张-AI 2009-11-18
  • 打赏
  • 举报
回复
sqlserver的话 ID设置为自动增长啊
crazylaa 2009-11-18
  • 打赏
  • 举报
回复
不好意思,sql server只有自增列,没有sequence对象。。。。
搞错了,sorry~~~
crazylaa 2009-11-18
  • 打赏
  • 举报
回复
哎,我机子上没装sqlserver。但我知道它支持的,你google或百度一下吧~~~
lijiark1988 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 crazylaa 的回复:]
在数据库里面建个sequence,(MSSQLSERVER、DB2、Oracle都支持),初始化之前取得序列号给它。
没插入sequence反正增上去了给你空着那个值。
[/Quote]

没有接触过这些数据库 我接触了SQLSERVER数据库 所以你说用数据库还是不懂哦
crazylaa 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lijiark1988 的回复:]
不能采用系统时间 要求就必须是像自增一样的  但是又不是主键

单个用户进来还行 多个用户进来就会有重复的编号  利用数据库 不是很会 我只会对数据库就行简单的增删改查
[/Quote]

你用的啥数据库?
lijiark1988 2009-11-18
  • 打赏
  • 举报
回复
不能采用系统时间 要求就必须是像自增一样的 但是又不是主键

单个用户进来还行 多个用户进来就会有重复的编号 利用数据库 不是很会 我只会对数据库就行简单的增删改查
crazylaa 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 aptweasel 的回复:]
可以做一个单例模式,定义一个静态的全局变量,每次创建对像的时候,这个数字加1即可,然后把参数返回,缺点,服务重起数字从头开始再计,除非在数据库里做一个自动增长的序列或物理文件里有一个地方存贮状态。
[/Quote]
不用数据库的序列很难做到不唯一噢,特别是多客户端的应用。
我试过(系统时间戳+随机6位整数)都有可能重复的,虽然概率小。。
crazylaa 2009-11-18
  • 打赏
  • 举报
回复
oracle的:
create SEQUENCE seq_sms_id increment by 1 start with 1 maxvalue 9999999999 cycle;
加载更多回复(4)

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧