simpleJdbcCall只返回1行

时间:2014-09-09 11:16:03

标签: java postgresql stored-procedures plpgsql spring-jdbc

我在pl / pgsql中编写了一个存储过程,它在pgAdmin中工作正常。我使用simpleJBDCCall来调用返回一组记录的过程。当我使用SimpleJdbcCall执行函数从java调用存储过程时,只有1行返回给java,在pgAdmin中调用的相同过程返回多行。

我的存储过程是:

    CREATE OR REPLACE FUNCTION get_instruments_list(userName varchar, OUT a int,out b int,out c int)
    RETURNS setof Record 
    AS
    $$
    DECLARE
       BEGIN
           RETURN query select 1,2,3;
           RETURN QUERY select 5,2,3;
           RETURN query select 6,2,3;
           return;
       END;
    $$
   LANGUAGE 'plpgsql' VOLATILE;

我调用存储过程的java函数是:

    public static void main(String[] a){

    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/config/applicationContext-postgreSQL.xml");
    JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean("pgJdbcTemplate");
    SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate);

    jdbcCall.setSchemaName("dhapic");
    jdbcCall.setProcedureName("get_instruments_list");
    Map<String, String> inputParamater = new HashMap<>();
    inputParamater.put("userName", "dhanush");
    jdbcCall.returningResultSet("result", new RowMapper() {
        @Override
        public InstrumentList mapRow(ResultSet rs, int rowNum) throws SQLException {
            InstrumentList instrumentList = new InstrumentList();
            instrumentList.setInstrumentId(rs.getInt(1));
            instrumentList.setInstrumentToken(rs.getInt(2)+"");
            instrumentList.setUserRole(rs.getInt(3)+"");
            return instrumentList;
        }
    });
    Map<String,Object> response = jdbcCall.execute(inputParamater);
    System.out.println("response"+response);
 }

使用spring传递JdbcTemplet值。

响应对象只包含1行,但我期待3行。 请帮我调试一下这个问题。

0 个答案:

没有答案