我想创建一个优先级编号,其中一个帐户将被随机分配一个唯一编号。我现在还在学习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);
}
}
答案 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(..
,这样就可以了。