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;  
   }

解决方案 »

  1.   

    guid。有现成别人写好的东西。
      

  2.   

    建个HashMap,以表名为键,记录该表的最大记录数。
    在需要往某个表插入记录前,先从HashMap中获取该表的最大记录数。
    此时有两种情况,
    1、HashMap中没有对应的信息,此时需要运行select count(*) from 表名 获取最大记录数,然后加1就得到了将要插入记录的主键值,还要将这表名和加1后的记录数put到HashMap中;
    2、HashMap中有对应信息,此时直接从HashMap中取得最大记录数并加1得到将要插入记录的主键值,然后再更新HashMap。
    上面的方法可以得到类似于id自动递增的效果,需要注意操作时的同步。