我不确定我对随机类的使用是否正确 - 也许我误解了它。 (但是,我已经多次看到这种用法,但是,在我的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