java - 在 Spring 中使用 SimpleJdbcCall 调用返回行的 Oracle 过程

标签 java spring spring-mvc oracle11g

我编写了以下代码

       MapSqlParameterSource in = new MapSqlParameterSource();
       in.addValue("V_OPP_ID", bean.getOpportunityId());
       in.addValue("V_NAME",bean.getName());
       in.addValue("V_FROM_DATE", bean.getStdate());
       in.addValue("V_TO_DATE", bean.getEddate());
       in.addValue("V_USERTYPE", bean.getUserType());
       jdbcCall.execute(in);

这里 jdbcCall.execute(in) 返回与 Arraylist 对应的结果集/表。我如何提取这个ArrayList

使用 jdbcCall 是正确的方法吗?如果不是,建议什么?

最佳答案

这是我用于调用函数的代码:

RowMapper<String> rm = new ParameterizedRowMapper<String>() {
    @Override
    public String mapRow(ResultSet rs, int rowNum) throws SQLException {
        return rs.getString(1);
    }
};
myStoredProcedure = new SimpleJdbcCall(DataSourceConnection.getDataSource())
        .withCatalogName("PACKAGE")
        .withFunctionName("GET_ALIAS")
        .returningResultSet("return", rm);

MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("P_ID",userStr);
params.addValue("P_DOMAIN_ALIAS", domain[0]);
List<String> list = myStoredProcedure.executeFunction(List.class,params);

如果您无法使用元数据,则代码如下:

RowMapper<String> rm = new ParameterizedRowMapper<String>() {
    @Override
    public String mapRow(ResultSet rs, int rowNum) throws SQLException {
        return rs.getString(1);
    }
};
SqlParameter emailParam = new SqlParameter("P_ID", OracleTypes.VARCHAR);
SqlParameter domainParam = new SqlParameter("P_DOMAIN_ALIAS", OracleTypes.VARCHAR);
SqlOutParameter resultParam = new SqlOutParameter("return", OracleTypes.CURSOR);
myStoredProcedure = new SimpleJdbcCall(DataSourceConnection.getDataSource())
        .withCatalogName("PACKAGE")
        .withFunctionName("GET_ALIAS")
        .withoutProcedureColumnMetaDataAccess()
        .returningResultSet("return", rm)
        .declareParameters(resultParam, emailParam, domainParam);

MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("P_ID",userStr);
params.addValue("P_DOMAIN_ALIAS", domain[0]);
List<String> list = myStoredProcedure.executeFunction(List.class,params);

关于java - 在 Spring 中使用 SimpleJdbcCall 调用返回行的 Oracle 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18865531/

相关文章:

java - Spring Web 服务动态 wsdl 不为架构元素生成消息

Spring 请求映射通配符异常

java - 我可以仅通过 xml 完全不使用注释来使用 Spring 吗?

java - 2D Java 数组值与我的意图不相关

java - 如何更改 JPanel 的字体大小

Java SSL 选择错误的证书,忽略 key 用法

java - 来自 GWT 的 Spring

java - Spring Controller 设置问题?

java - 如何在 Catalina.out 中禁用 hibernate 日志

java - 如何使用 "android.util.log"调试 cordova 插件和日志记录