如何从java插入数据库一个随机的唯一整数?

时间:2016-03-09 18:19:01

标签: java mysql sql

我想创建一个优先级编号,其中一个帐户将被随机分配一个唯一编号。我现在还在学习java和mysql,请原谅任何错误,我希望你能帮我解决这个问题。谢谢!

    public void add() {
    try {

        Class.forName("com.mysql.jdbc.Driver");  // MySQL database connection
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/system?" + "user=root&password=");
        PreparedStatement pstmt = null;

        pstmt = conn.prepareStatement("insert into customer values (?,?,?,?,?,?,?)");

        //customer_id
        pstmt.setInt(1, 0);
        //customer_name
        pstmt.setString(2, tf_name.getText());
        //customer_address
        pstmt.setString(3, tf_address.getText());
        //customer_contactqw
        pstmt.setString(4, tf_contact.getText());
        //customer_email
        pstmt.setString(5, tf_email.getText());
        //order_priority
        pstmt.setInt(6, 1000 + RAND() * 89999); // <-- pls help me here
        //customer_date            
        pstmt.setDate(7, convertUtilDateToSqlDate(dateChooser.getDate()));

        //execute the query
        pstmt.executeUpdate();

        //      JOptionPane.showMessageDialog(null, "Successfully added a new record!");
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);

    }

}

2 个答案:

答案 0 :(得分:2)

How do I create a unique ID in Java?

您可以创建UUID:

 pstmt.setInt(6, UUID.randomUUID().toString());

编辑:没有简单的方法来创建没有冲突的整数唯一ID,因为只有2 ^ 32个选项,这可能最终导致冲突。 你可以创建一个数组,它将为你保存到目前为止所有随机生成的数字。

如果您想冒险碰撞,可以尝试:

SecureRandom random = new SecureRandom();
pstmt.setInt(6, random.nextInt(Integer.MAX_VALUE));

如果要跟踪到目前为止输入的所有ID以防止发生碰撞,可以将它们存储在数组中。 我们假设你有ArrayList<int> arr;

SecureRandom random = new SecureRandom();
boolean inserted;
do{
    inserted = true;
    int id = random.nextInt(MAX_VALUE);
    for (int i=0; i<arr.size();i++){
        if (arr.get(i) == id)
            inserted = false;
    }
    if (!inserted){
        arr.add(id);
        pstmt.setInt(6,id);
    }
}while(!inserted);

答案 1 :(得分:0)

假设您在Math.random()方法中使用RAND()(或类似方法),它始终返回double。 PreparedStatement的setInt方法需要一个int参数,而乘法会产生double,这就是错误的原因。

您可以将setInt(..更改为setDouble(..,这样就可以了。