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.