java - Spring - 使用存储过程时使用 simplejdbccall 进行批量更新

标签 java stored-procedures spring-batch jdbctemplate spring-4

我正在使用 spring jdbc 模板,使用存储过程创建记录

public Long create(City $obj) {
    SimpleJdbcCall jdbcCall = new SimpleJdbcCall(getJdbcTemplate().getDataSource()).withProcedureName(SP_ADD_UPDATE);
    jdbcCall.declareParameters(new SqlOutParameter(ConstantUtil.RETUR_VAL, OracleTypes.BIGINT));
    Map<String, Object> jdbcCallResult = jdbcCall.execute(new MapSqlParameterSource(populateParams($obj)));
    return (Long) jdbcCallResult.get(ConstantUtil.RETUR_VAL);
}

参数

private static Map<String, Object> populateParams(City $obj) {

    Map<String, Object> _params = new HashMap<String, Object>();
    _params.put("CITYID", $obj.getCityId());
    _params.put("CITYNAME", $obj.getCityName());
    _params.put("USERID", $obj.getCurUser());
    return _params;

}

如何在使用存储过程的同时使用 simpleJdbcCall 进行批量更新?

最佳答案

我找到了使用 jdbcTemplate 的解决方案:

public int insertBatch(final List<ExperimentUser> usersByExperiment)
            throws Exception {

        int[] insertedRows = getJdbcTemplate().batchUpdate("call myschema.myProc(?,?)",
                new BatchPreparedStatementSetter() {

                    @Override
                    public void setValues(PreparedStatement ps, int i)
                            throws SQLException {
                        ExperimentUser experimentUser = usersByExperiment
                                .get(i);
                        ps.setInt(1, experimentUser.getExperimentId());
                        ps.setString(2, experimentUser.getUniqueCode());                        
                    }

                    @Override
                    public int getBatchSize() {
                        return usersByExperiment.size();
                    }
                });
        return insertedRows.length;
    }    

关于java - Spring - 使用存储过程时使用 simplejdbccall 进行批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46865291/

相关文章:

java - 面向对象的android将方法从 Activity 中移动到具有上下文的新类中

java - 什么时候在java中使用Long vs long?

java - 如果抛出异常,则使用非零代码退出 spring-batch 作业

mysql - 缺少 END - Mysql 存储过程

sql-server - MSSQL Nodejs 模块在执行存储过程时抛出无效时间

java - Spring Batch - 将参数从 Writer 传递到 Listener 以进行 afterJob(JobExecution jobExecution)

java - jobRepository 是否必须使用与 JdbcBatchItemWriter 相同的事务管理器?

java - 是否有我可以引用的可能的 IllegalAnnotationExceptions 列表?

java - Play Framework 2.3.8 Java - 使用特定模式覆盖默认配置加载

java - ORA-01843 : not a valid month