是中間填充0嗎?
創(chuàng)新互聯(lián)長期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為五龍口企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),五龍口網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
TYPEABBREVIATE || right(6,'000000' || to_char(PRESENTNO))
既然是流水不重復(fù),那么這個(gè)變量一定是常駐內(nèi)存。。
簡(jiǎn)單的方法當(dāng)然是個(gè)靜態(tài)變量。。。
class A
{
static double n=0;
public static double getNumber()
{
double++;
return double ;
}
}
需要的時(shí)候直接 A.getNumber();直接重復(fù)調(diào)用就可以了。
如果是關(guān)了程序下次還是不重復(fù),那就可以使用文件來初始化n
關(guān)閉程序把當(dāng)前n保存到文件。
我為您寫了 一遍,望采納。
package?Zxing;
import?java.text.SimpleDateFormat;
import?java.util.Date;
import?java.util.Random;
/**
*?
*?開發(fā)公司:SOJSON在線工具?p
*?版權(quán)所有:??
*?博客地址:
*?p
*?
*?Demo
*?
*?p
*?
*?區(qū)分 責(zé)任人 日期說明br/
*?創(chuàng)建 周柏成 2017年4月11日?09:43? br/
*
*?@author?zhou-baicheng
*?@email??so@sojson.com
*?@version?1.0,2017年4月11日?09:43?br/
*?
*/
public?class?Demo?{
public?static?void?main(String[]?args)?{
//格式化當(dāng)前時(shí)間
SimpleDateFormat?sfDate?=?new?SimpleDateFormat("yyyyMMddHHmmssSSS");
String?strDate?=?sfDate.format(new?Date());
//得到17位時(shí)間如:20170411094039080
System.out.println("時(shí)間17位:"?+?strDate);
//為了防止高并發(fā)重復(fù),再獲取3個(gè)隨機(jī)數(shù)
String?random?=?getRandom620(3);
//最后得到20位訂單編號(hào)。
System.out.println("訂單號(hào)20位:"?+?strDate?+?random);
}
/**
*?獲取6-10?的隨機(jī)位數(shù)數(shù)字
*?@param?length????想要生成的長度
*?@return?result
*/
public?static?String?getRandom620(Integer?length)?{
String?result?=?"";
Random?rand?=?new?Random();
int?n?=?20;
if?(null?!=?length??length??0)?{
n?=?length;
}
int?randInt?=?0;
for?(int?i?=?0;?i??n;?i++)?{
randInt?=?rand.nextInt(10);
result?+=?randInt;
}
return?result;
}
}
希望對(duì)你有幫助!獲取當(dāng)前時(shí)間毫秒數(shù),如果是單線程的話,一定無重復(fù)
一般這樣在多線程并發(fā)中取到相同毫秒的概率都幾乎為0,基本可以保證無重復(fù)
方法一:
不用數(shù)據(jù)庫的話弄個(gè)?static個(gè)變量,自己設(shè)置個(gè)synchronized
示例:
import?java.text.DecimalFormat;
import?java.text.SimpleDateFormat;
import?java.util.Date;
public?class?PrimaryGenerater?{
private?static?final?String?SERIAL_NUMBER?=?"XXXX";?//?流水號(hào)格式
private?static?PrimaryGenerater?primaryGenerater?=?null;
private?PrimaryGenerater()?{
}
/**
*?取得PrimaryGenerater的單例實(shí)現(xiàn)
*
*?@return
*/
public?static?PrimaryGenerater?getInstance()?{
if?(primaryGenerater?==?null)?{
synchronized?(PrimaryGenerater.class)?{
if?(primaryGenerater?==?null)?{
primaryGenerater?=?new?PrimaryGenerater();
}
}
}
return?primaryGenerater;
}
/**
*?生成下一個(gè)編號(hào)
*/
public?synchronized?String?generaterNextNumber(String?sno)?{
String?id?=?null;
Date?date?=?new?Date();
SimpleDateFormat?formatter?=?new?SimpleDateFormat("yyyyMMdd");
if?(sno?==?null)?{
id?=?formatter.format(date)?+?"0001";
}?else?{
int?count?=?SERIAL_NUMBER.length();
StringBuilder?sb?=?new?StringBuilder();
for?(int?i?=?0;?i??count;?i++)?{
sb.append("0");
}
DecimalFormat?df?=?new?DecimalFormat("0000");
id?=?formatter.format(date)
+?df.format(1?+?Integer.parseInt(sno.substring(8,?12)));
}
return?id;
}
}
方法二:
可以在數(shù)據(jù)庫新建序列,再新建一個(gè)存儲(chǔ)過程控制序列,返回序列值,比如sqlserver用identity,oracle用序列,存儲(chǔ)過程可以加鎖,當(dāng)達(dá)到999999的時(shí)候重置序列,通過代碼調(diào)用存儲(chǔ)過程獲得返回值。
2、全局變量。通過方法獲取下一個(gè)值,方法同步。