Java中的Oracle主键生成器

玛丽亚:

我的应用程序允许用户创建一个帐户(存储在数据库中)并下订单。
当客户注册自己时,我想生成一个名为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);
                }


            }
        }
    } 
MT0:

不要用Java来做;使用以下序列处理数据库中主键值的创建

CREATE SEQUENCE CLIENT__CLIENT_CODE__SEQ
START WITH 1
INCREMENT BY 1

然后,只需在INSERT语句中使用序列并使用RETURNING子句即可将生成的值作为OUT您准备好的语句参数。

insert into CLIENT (
  FNAME_CL,
  LNAME,
  CITY,
  STREET,
  NUMBER,
  MONEY,
  CLIENT_CODE,
  USER_CLIENT,
  PASS
) values (
  ?,
  ?,
  ?,
  ?,
  ?,
  ?,
  CLIENT__CLIENT_CODE__SEQ.NEXTVAL,
  ?,
  ?
) RETURNING CLIENT_CODE INTO ?

如果使用的是Oracle 12c,则可以GENERATED AS IDENTITY在表的CREATEDDL语句中使用它来生成值,而无需创建单独的序列。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章