[英]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();
您需要使用以PreparedStatementCreator
和KeyGenerator
作為參數的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.