我不確定我對隨機類的使用是否正確 - 也許我誤解了它。 (但是,我已經多次看到這種用法,但是,在我的Google中)。java:在循環中生成隨機數
我試圖通過連接一個隨機數和一個字符串來生成唯一的發票號碼,查找數據庫中的發票以查看它是否存在,如果確實存在,則創建一個新的發票號碼並重試。以下是我的代碼,並低於用於測試,而條款的真實性的方法:
String iname = "foo";
int sequence = 0;
String invoice_name = "";
Random generator = new Random();
do {
sequence = generator.nextInt(1000);
invoice_name = iname + String.format("%03d", sequence);
} while(!isUniqueInvoiceName(invoice_name, params, qb)
// QueryBatch is just a caching mechanism and batch committer for queries
private boolean isUniqueInvoiceName(String invoice_name, HashMap params, QueryBatch qb) {
if(params.get("x_invoice_num") == null) params.put("x_invoice_num",invoice_name);
// Invoice.select returns the primary key of the top 1 invoices found, or 0 if none found.
int pk = Invoice.select(params, qb);
System.out.println("============= pk = " + pk + " =============");
return (pk == 0);
}
什麼情況是,錯誤日誌顯示PK = 13(或東西),然後將它無限地重複該消息。我看不出爲什麼。是不是正在生成一個新的隨機數?或者是select方法返回相同結果而不查看新參數的唯一解釋?也許是緩存問題?這是在tomcat/MS SQL上。
考慮使用'java.util.UUID'來生成唯一的'invoice_name's。 – hmjd