【问题标题】:Retrieve Auto-Generated ID in Java Code From Oracle DataBase从 Oracle 数据库中检索 Java 代码中自动生成的 ID
【发布时间】:2017-04-03 19:25:16
【问题描述】:

我正在使用带有 Oracle 数据库的 Spring JDBC 模板。 我想在成功插入数据库后取回自动生成的 ID 字段。

请帮我从 DB 获取自动生成的 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 (?,?,?)");
        }
    }

【问题讨论】:

    标签: java database spring oracle jdbctemplate


    【解决方案1】:

    @Darshan 提到的使用GeneratedKeyHolder 是可行的方法。

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

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

    【讨论】:

      【解决方案2】:

      您需要使用以PreparedStatementCreatorKeyGenerator 作为参数的update 方法的重载版本(记录在here):

      您的代码将如下所示:

      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());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-06
        • 1970-01-01
        • 1970-01-01
        • 2017-06-07
        • 2016-05-23
        • 2014-06-29
        • 2012-05-30
        • 1970-01-01
        相关资源
        最近更新 更多