public synchronized static String getKey() {
String key = " ";
long time = new Date().getTime();
if ( time == prevTime ) {
int cs = clockSequence + 1;
if ( cs > 65535 ) cs = 0;
if ( clockSequence > cs ) {
clockSequence = 0;
try {
Thread.sleep(1);
time = new Date().getTime();
}catch(InterruptedException ie) {
ie.printStackTrace();
}
}else {
clockSequence = cs;
}
}
key = time + Integer.toHexString(clockSequence);
prevTime = time;
return key;
}
String key = " ";
long time = new Date().getTime();
if ( time == prevTime ) {
int cs = clockSequence + 1;
if ( cs > 65535 ) cs = 0;
if ( clockSequence > cs ) {
clockSequence = 0;
try {
Thread.sleep(1);
time = new Date().getTime();
}catch(InterruptedException ie) {
ie.printStackTrace();
}
}else {
clockSequence = cs;
}
}
key = time + Integer.toHexString(clockSequence);
prevTime = time;
return key;
}
在需要往某个表插入记录前,先从HashMap中获取该表的最大记录数。
此时有两种情况,
1、HashMap中没有对应的信息,此时需要运行select count(*) from 表名 获取最大记录数,然后加1就得到了将要插入记录的主键值,还要将这表名和加1后的记录数put到HashMap中;
2、HashMap中有对应信息,此时直接从HashMap中取得最大记录数并加1得到将要插入记录的主键值,然后再更新HashMap。
上面的方法可以得到类似于id自动递增的效果,需要注意操作时的同步。