使用spring调用返回游标的过程

时间:2018-12-01 10:10:01

标签: postgresql spring-jdbc

我想从Postgres调用一个函数,该函数在Postgres更改游标名称时返回游标,因此解决方案是将游标名称作为函数参数提供,然后从下面的调用返回的结果中获取该游标是代码i正在调用函数

 DefaultTransactionDefinition def = new DefaultTransactionDefinition();

    TransactionStatus status = dsTransactionManager.getTransaction(def);

    try
    {
        List<Users> lst = new ArrayList<>();    

        SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate.getDataSource());

        String cName = UUID.randomUUID().toString() + "_cur";

        simpleJdbcCall.setFunction(true);
        simpleJdbcCall.withFunctionName("get_org_users");
        simpleJdbcCall.returningResultSet(cName, BeanPropertyRowMapper.newInstance(Users.class));

        simpleJdbcCall.declareParameters(
                new SqlParameter("orgid", Types.BIGINT),
                new SqlParameter("user_cn", Types.OTHER),
                new SqlOutParameter(cName, Types.REF_CURSOR)
                );

        Map<String, Object> params = new HashMap<String, Object>(); 
        params.put("orgid", orgID);
        params.put("user_cn", cName);
        Map<String, Object> result =
                simpleJdbcCall.execute(params); 
        dsTransactionManager.commit(status);                    

        lst = (List<Users>) result.get(cName);

        return lst;
    }
    catch (Exception e) {
        dsTransactionManager.rollback(status);
        throw e;
    }
    finally
    {           
    }

我想问的是是否可以在不指定游标名称的情况下获取游标,例如,我可以使用简单的jdbc

    connection = jdbcTemplate.getDataSource().getConnection();
    connection.setAutoCommit(false);
    ..................... 
    CallableStatement proc=connection.prepareCall(query,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    ..............
    proc.execute();
    rs  = (ResultSet) proc.getObject(1);

您可以从上面的代码中看到我执行了该函数并获得了游标,而未指定游标名称,因此可以对postgres进行同样的操作吗?

0 个答案:

没有答案