Есть ли способ получить объект набора результатов из одного из методов запроса jdbctemplate?
У меня есть код вроде
List<ResultSet> rsList = template.query(finalQuery, new RowMapper<ResultSet>() {
public ResultSet mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs;
}
}
);
Я хотел выполнить инструкцию sql, хранящуюся в finalQuery String, и получить набор результатов. Запрос представляет собой сложное объединение для 6-7 таблиц, и я выбрал 4-5 столбцов в каждой таблице и хотел получить метаданные этих столбцов для преобразования типов данных и данных в последующие системы.
Если это простой запрос, и я выбираю только одну таблицу, я могу использовать RowMapper # mapRow и внутри этого метода maprow я могу вызвать ResultsetExtractor.extractData, чтобы получить список результатов; но в этом случае у меня есть сложные объединения в моем запросе, и я пытаюсь получить объект набора результатов и из метаданных этого набора результатов ...
Приведенный выше код не годится, поскольку для каждого результата он возвращает один и тот же объект набора результатов, и я не хочу хранить их в списке ...
Еще раз: если для каждого результата из моего запроса вызывается maprow, JDBCTemplate закроет rs и соединение, даже если в моем списке есть ссылка на объект RS?
Есть ли какой-нибудь простой метод, такой как jdbcTemplate.queryForResultSet (sql)?
Теперь я реализовал свой собственный ResultSet Extractor для обработки и вставки данных в последующие системы
sourceJdbcTemplate.query(finalQuery, new CustomResultSetProcessor(targetTable, targetJdbcTemplate));
Этот CustomResultSetProcessor реализует ResultSetExtractor, и в методе extractData я вызываю 3 различных метода: 1 - получить форму ColumnTypes rs.getMetaData (), а вторым - getColumnTypes целевых метаданных, выполнив
SELECT NAME, COLTYPE, TBNAME FROM SYSIBM.SYSCOLUMNS WHERE TBNAME ='TABLENAME' AND TABCREATOR='TABLE CREATOR'
и в третьем методе я создаю оператор вставки (подготовленный) из целевого типа столбца и, наконец, вызываю его, используя
new BatchPreparedStatementSetter()
{
@Override
public void setValues(PreparedStatement insertStmt, int i) throws SQLException{} }
Надеюсь, это поможет другим ...