JdbcTemplate multiple result sets

java, jdbc, spring-jdbc

Solution

I managed to get a `Set<ResultSet>` using this code,

private Set<ResultSet> executeProcedure(final String sql)
{
    return jdbc.execute(new CallableStatementCreator() {
        @Override
        public CallableStatement createCallableStatement(Connection con) throws SQLException
        {
            return con.prepareCall(sql);
        }
    }, new CallableStatementCallback<Set<ResultSet>>() {
        @Override
        public Set<ResultSet> doInCallableStatement(CallableStatement cs) throws SQLException
        {
            Set<ResultSet> results = new HashSet<>();

            boolean resultsAvailable = cs.execute();

            while (resultsAvailable)
            {
                results.add(cs.getResultSet());
                resultsAvailable = cs.getMoreResults();
            }
            return results;
        }
    });
}

Just going to look at translating a `ResultSet` into `List<Map<String, Object>>`.

Problem

I am trying to find an easy way to deal with Stored Procedures / SQL returning multiple result sets. I have been using the `SimpleJdbcOperations#queryForList()` method however this will only return the first result set as a `List<Map<String, Object>>`. I need to be able to get multiple result sets, ideally as a `Collection` of `List<Map<String, Object>>` or something. The program I am writing is a middleware component so I don't know what the SQL will be, or the form of the result set. I think I have to use the `JdbcOperations` class which gives me access to more methods, including `execute(CallableStatementCreator csc, CallableStatementCallback<T> action)` but now I am stuck. ``` CallableStatementCallback<T> callback = new CallableStatementCallback<T>() { @Override public T doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { boolean results = cs.execute(request); while(results) { ResultSet result = cs.getResultSet(); results = cs.getMoreResults(); } return null; } }; ``` I am not really sure how to use the method though, or what to do with the `ResultSet` to get my generic `List<Map<String, Object>>`s.

Original source

Related problems