Я пытаюсь запустить хранимую процедуру SQL Server 2014 из кода Java (Spring) и получить некоторые результаты XML.
Когда я запускаю это в клиенте SQL, например RazorSQL Я получаю кучу xmls (что ожидается, потому что в нем несколько хранимых процедур, которые возвращают эти xml).
Вот вызов Exec от моего клиента SQL:
EXEC [dbo]. [Sp_GetType]
@TRAN_ID = 42
@QUAL_ID = 0
GetType возвращает RETURN 0 в конце (поэтому, в основном, если все шаги завершаются успешно, он возвращает 0)
Это открывает несколько вкладок в моем клиенте с xmls.
И один пример хранимой процедуры в GetType имеет следующие строки:
SELECT TOP 1 ModifiedBy = CASE WHEN @IS_ID = 1 FROM TABLE23.dbo.TRX
TrxId WITH (NOLOCK) WHERE @DD_ID = @TRAN_ID
FOR XML AUTO, ELEMENTS
Моя цель - собрать все xmls, возвращаемые GetType, в список объектов.
Вот мой дао:
private final JdbcTemplate jdbcTemplate;
@Autowired
public TransactionDao(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Transactional(readOnly = true)
public List<Object> getTransaction(Integer tranId, Integer qualId) {
Object dt = new Object();
List<Object> resultList = (List<Object>) jdbcTemplate.execute(
new CallableStatementCreator() {
public CallableStatement createCallableStatement(Connection con) throws SQLException {
String storedProc = "{call sp_GetType(?,?)}";
CallableStatement cs = con.prepareCall(storedProc);
cs.setInt(1, tranId);
cs.setInt(2, qualId);
return cs;
}
}, new CallableStatementCallback() {
public Object doInCallableStatement(CallableStatement > cs) throws SQLException,
DataAccessException {
List<Object> results = new ArrayList<Object>();
cs.execute();
if(cs.getMoreResults())
{
ResultSet rs = cs.getResultSet();
while(rs.next()) //rs has only one record
{
InputStream in = null;
Clob clob = rs.getClob(1);
in = clob.getAsciiStream();
}
rs.close();
}
return results;
}
});
return resultList;
}
Я использую драйвер jtds 1.3.1 (я пытался подключиться с помощью mssql-jdbc, но безуспешно).
Буду признателен за любую оказанную помощь.