我的目标是生成随机数并插入数据库。我不想要任何重复。我完成了我的研究,其中之一是首先检查数据库,然后插入。
//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语句是有效的方法。还是有另一种方式?
有什么建议吗?
帮助将不胜感激! :)
答案 0 :(得分:2)
为什么不在数据库中使用自动递增标识列,实质上是让数据库为您创建一个唯一的ID?每个现代DBMS都支持此功能。
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
)
对于PostgreSQL:
CREATE TABLE animals
(
id serial primary key,
name VARCHAR(40) not null
);
所有数据库都具有此功能,当您使用JDBC插入行时,您将返回响应中插入行的键。一个简化的例子:
String query = "INSERT INTO animals (name) VALUES ('zebra')";
Integer insertedId = stmt.executeUpdate(query, Statement.RETURN_GENERATED_KEYS);
答案 1 :(得分:0)
如果您只想生成随机数并插入数据库,那么您可以使用Fisher Yates shuffle algorithm
查看此问题以获取详细信息:Unique (non-repeating) random numbers in O(1)?
答案 2 :(得分:0)
您可以将随机数(生成/现有)保存到集合/或缓存或队列中。不需要每次都在DB中检查。 尝试批量执行操作。要么首先根据您的要求生成所有唯一的随机数和持久性。
在列上定义唯一ID - 不需要进行选择和插入,只需在失败的情况下执行INSERT重复相同的过程。
您可以使用递归,因为我们不知道失败的数量。
theexamtime.com