【发布时间】:2013-12-31 16:10:42
【问题描述】:
我的目标是生成随机数并插入数据库。我不想要任何重复。我已经完成了我的研究,其中之一是先检查数据库,然后插入。
//GENEREATE RANDOM NUMBER
long number = (long) Math.floor(Math.random() * 900000L) + 900000L;
//CHECK IF NUMBER IS ALREADY EXIST IN DATABASE
String searchQuery = "select appleId from food where appleId='" + number + "'";
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(searchQuery);
boolean appleIdExists = rs.next();
//IT IS UNIQUE
if (!appleIdExists) {
try {
//INSERT STATEMENT
.......
} catch (SQLException e) {
e.printStackTrace();
}
}
//IT IS NOT UNIQUE..
else
{
.....
}
}catch (Exception ex) {
System.out
.println("Log In failed: An Exception has occurred! "
+ ex);
}
所以我的问题是如果它不是唯一的,我需要生成另一个数字并再次检查吗?并一次又一次地检查,直到它是唯一的?结果会不会是很多 if-else 语句?
我不确定使用 if-else 语句是否是有效的方法。还是有别的办法?
有什么建议吗?
帮助将不胜感激! :)
【问题讨论】:
-
使用循环而不是 if/else。
-
这是唯一插入表格的东西吗?如果没有,这无论如何都不够好,因为在您的支票和插入之间可能会插入数字。相反,在表上添加一个约束,try 执行插入,并捕获任何引发的约束冲突异常并重试。此外,您应该使用参数化 SQL 而不是字符串连接。还要考虑使用数据库本身为此提供的任何工具 - 如果您真的只想要一个唯一的 ID,有很多方法可以解决这个问题。随机性有多重要?
-
必须是数字吗?可以改为 GUID 吗? docs.oracle.com/javase/6/docs/api/java/util/UUID.html
-
@JonSkeet 这不是唯一的......还有更多,但我从不包括在这里。
-
@Taylor 是 5 位数字。
标签: java random unique sql-insert