【发布时间】:2019-11-28 11:44:09
【问题描述】:
我的应用允许用户创建帐户(存储在数据库中)并下订单。
当客户注册自己时,我想生成一个名为 CLIENT_CODE 的主键来识别他,从 x 值开始并以 y 值递增。 (我使用的是 oracle 11g atm)
到目前为止我已经尝试过了:
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {
String fname = jTextField9.getText();
String lname = jTextField10.getText();
String city = jTextField11.getText();
String street = jTextField13.getText();
String number = jTextField14.getText();
String userClient = jTextField15.getText();
String pass1 = String.valueOf(jPasswordField5.getPassword());
String pass2 = String.valueOf(jPasswordField6.getPassword());
if(verifyFields()){
if(!checkUsername(userClient)){
OraclePreparedStatement ps;
OracleResultSet rs;
String registerClient = "insert into CLIENT (FNAME_CL, LNAME, CITY, STREET, NUMBER, MONEY, CLIENT_CODE, USER_CLIENT, PASS) values (?, ?, ?, ?, ?, ?, ?, ?, ?)";
try {
ps = (OraclePreparedStatement) JavaConnectDb.ConnectDb().prepareStatement(registerClient);
ps.setString(1, fname);
ps.setString(2, lname);
ps.setString(3, city);
ps.setString(4, street);
ps.setString(5, number);
ps.setDouble(6, 0.0);
ps.setInt(7, ???); <--- here should be the generated primary key
ps.setString(8, userClient);
ps.setString(9, pass1);
if(ps.executeUpdate() != 0){
JOptionPane.showMessageDialog(null, "Account created!");
} else{
JOptionPane.showMessageDialog(null, "Error: Check your info");
}
} catch (SQLException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
【问题讨论】:
-
使用 x 的 CLIENT_CODE 开始您的客户端数据库条目,然后在任何未来的客户端条目上,只需检索 CLIENT_CODE b>CLIENT_CODE 在 last(上一个)数据库条目中使用,并将其递增 y。
-
@DevilsHnd 不要那样做;如果两个条目(几乎)同时创建,那么它们都将请求最新的
CLIENT_CODE,并且都将尝试设置相同的值。您需要一种自动生成唯一值的方法。
标签: java sql oracle primary-key