Не удается записать XML, возвращенный хранимой процедурой SQL Server с использованием Java - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь запустить хранимую процедуру 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, но безуспешно). Буду признателен за любую оказанную помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...