生成随机&唯一编号并插入数据库

时间:2013-12-31 16:10:43

标签: java random unique sql-insert

我的目标是生成随机数并插入数据库。我不想要任何重复。我完成了我的研究,其中之一是首先检查数据库,然后插入。

//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语句是有效的方法。还是有另一种方式?

有什么建议吗?

帮助将不胜感激! :)

3 个答案:

答案 0 :(得分:2)

为什么不在数据库中使用自动递增标识列,实质上是让数据库为您创建一个唯一的ID?每个现代DBMS都支持此功能。

MySQL

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)

  1. 您可以将随机数(生成/现有)保存到集合/或缓存或队列中。不需要每次都在DB中检查。 尝试批量执行操作。要么首先根据您的要求生成所有唯一的随机数和持久性。

  2. 在列上定义唯一ID - 不需要进行选择和插入,只需在失败的情况下执行INSERT重复相同的过程。

  3. 您可以使用递归,因为我们不知道失败的数量。

  4. theexamtime.com