java - 在preparedstatement中创建自动增量id

标签 java oracle

我想使用preparedstatement创建自动增量id,我正在使用oracle数据库,这是我的代码

public Client newClient(Client client){
        try {
            con = DBConnection.getConnection(driver, url, name, pass);      
            pstmt = con.prepareStatement("INSERT INTO CLIENT (FIRSTNAME, LASTNAME, CAREER, CSALARY) VALUES (?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
            pstmt.setString(1, client.getFirstName());
            pstmt.setString(2, client.getLastName());
            pstmt.setString(3, client.getCareer());
            pstmt.setInt(4, client.getcSalary());
            pstmt.executeUpdate();      
            rs = pstmt.getGeneratedKeys();
             rs.next();

            int id = rs.getInt(1);
            client.setcId(id);
    }catch(Exception ex){
        ex.printStackTrace();
        return null;
    }finally{
        try{ rs.close(); }catch (Exception e){}
        try{ pstmt.close();}catch (Exception e){}
        try{ con.close();}catch (Exception e){}
    }//finally
    return client;
}`   

但我有这个错误

 java.sql.SQLException: ORA-01400: cannot insert NULL into ("AHMAD"."CLIENT"."CID")

请帮助我

最佳答案

听起来你需要一个 autonumber sequence

To retrieve the next value in the sequence order, you need to use nextval.

For example:

supplier_seq.nextval

这将为您的INSERT提供自动增量序列ID(即您只需执行INSERT,数据库将插入自动增量值)

关于java - 在preparedstatement中创建自动增量id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19244373/

相关文章:

java - 如何设置转换为字母的符号列表?

oracle - SQL*Loader 中的 if-else 情况

c# - Fluent NHibernate Join 映射到 Joined 表

java - 如何在@HandleBeforeCreate 处理程序之前对请求作用域bean 调用@PostConstruct?

java - 如何更改鼠标悬停时的图标?

java - 如何查看Java程序中每个方法在执行过程中所花费的时间

sql - 在PLSQL中将数字转换为varchar2,在PLSQL中没有千位分隔符

php - 如何在 pdo oracle(oci) 中将字符集设置为 UTF8

java - 插入时oracle + java编码问题

java - 项目使用 Ant 编译。但是如果我打开 eclipse,该项目将不再编译