簡體   English   中英

從Oracle數據庫檢索Java代碼中的自動生成的ID

[英]Retrieve Auto-Generated ID in Java Code From Oracle DataBase

我正在將Spring JDBC模板與Oracle數據庫一起使用。 我想在成功插入數據庫后取回自動生成的ID字段。

請幫助我從數據庫獲取自動生成的ID

這是我的示例代碼:

public class EmployeeObject {   
    int employeeId;
    public int getEmployeeId() {
        return employeeId;
    }
    public void setEmployeeId(int employeeId) {
        this.employeeId = employeeId;
    }
    String firstName;
    String lastName;

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }


}

--DAO接口-

public interface CreateEmployeeDao {

    public void insertIntoEmployeeObject(EmployeeObject employeeObject);
}

--DAO IMPL--

public class CreateEmployeeDaoImpl implements CreateEmployeeDao{

    @Override
    public void insertIntoEmployeeObject(EmployeeObject employeeObject){
            String sqlInsertObject = CreateEmployeeDBQueryConstants.INSERT_OBJECT_DETAILS.toString();
            int record = getJdbcTemplate().update(sqlInsertObject,
                    new Object[] { employeeObject.getEmployeeId(),
                                   employeeObject.getFirstName(), 
                                   employeeObject.getLastName()});
    }

}

數據庫查詢約束

public class CreateEmployeeDBQueryConstants {       

    public static final StringBuffer INSERT_OBJECT_DETAILS = new StringBuffer(100);

        static{     
        INSERT_OBJECT_DETAILS.append("insert into EXPORT_OBJECT "
                + "(EMPLOYEE_ID,EMPLOYEE_FIRST_NAME,EMPLOYEE_LAST_NAME, "
                + " values (?,?,?)");
        }
    }

如@Darshan所述,使用GeneratedKeyHolder是解決方法。

我更喜歡使用http://alvinalexander.com/blog/post/jdbc/spring-jdbc-insert-auto-generation-key中所示的方法:

KeyHolder keyHolder = new GeneratedKeyHolder();
getNamedParameterJdbcTemplate().update(sqlString, parameters, keyHolder);
return keyHolder.getKey().intValue();

您需要使用以PreparedStatementCreatorKeyGenerator作為參數的update方法的重載版本( 在此處記錄 ):

您的代碼將如下所示:

KeyHolder holder = new GeneratedKeyHolder();
PreparedStatementCreator creator = new PreparedStatementCreator() {
    @Override
    public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
        PreparedStatement insertStatement = con.prepareStatement(INSERT_OBJECT_DETAILS, new Object[] { 
                               employeeObject.getEmployeeId(),
                               employeeObject.getFirstName(), 
                               employeeObject.getLastName()}));
        return insertStatement;
    }
};
getJdbcTemplate().update(creator, holder);
System.out.println(holder.getKey());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM