Невозможно решить исключение SQLException без категории при вызове SQL Server с использованием JDBC - PullRequest
0 голосов
/ 26 мая 2019

Я использую JDBCTemplate для запроса к серверу SQL, используя:

Список результатов = jdbc.query (оператор, новый ResultDataMapper ());

Я пыталсяоператор в форматах PreparedStatementCreator и String, но ни один из них не работает.Я получил исключение ниже:

Состояние SQL [null];код ошибки [0];Утверждение не возвращало набор результатов .;вложенное исключение: com.microsoft.sqlserver.jdbc.SQLServerException: инструкция не вернула набор результатов.

Мой sql:

IF OBJECT_ID('tempdb.dbo.#tempSearch', 'U') IS NOT NULL
DROP TABLE #tempSearch;
CREATE TABLE #tempSearch
(
ID int,
Value VARCHAR(255)
)
INSERT INTO #tempSearch
VALUES(1,'?'),
(2,'?');
with cte as (
select RoleID,','+replace(replace(GroupNames,',',',,'),' ','')+',' GroupNames from UserGroup_Role_Mapping
)
,cte2 as(
select cte.RoleID, replace(cte.GroupNames,','+Value+',','') as GroupNames, s.ID, s.Value 
from cte
join #tempSearch s on ID=1
union all
select cte2.RoleID, replace(cte2.GroupNames,','+s.Value+',','') as l, s.ID ,s.Value
from cte2
join #tempSearch s on s.ID=cte2.ID+1
)
SELECT a.Role, a.Sort_Order, a.Parent, a.Parent_ID, a.Parent_URL, a.Child, a.Child_ID,a.Child_URL
FROM NC_View a 
WHERE a.Role IN (
Select Name from (
Select distinct RoleID from cte2 where len(GroupNames)=0
) tempRoles
join User_Role
on tempRoles.RoleID = User_Role.ID
)
DROP TABLE #tempSearch

Я знаю, что SQL работает нормальноно я просто не могу справиться с проблемой вызова из JDBC.У меня есть Mapper и Extractor все тоже сделано.

Я запустил это с PreparedStatementCreator и String:

  1. , когда я использую PreparedstatementCreator и пытаюсь установить 2 переменные, я получаю индексошибки вне диапазона "com.microsoft.sqlserver.jdbc.SQLServerException: индекс 1 находится вне диапазона.": PreparedStatementCreator returnValue = new PreparedStatementCreator () {@Override public PreparedStatement createPreparedStatement (Connection con) выбрасывает SQLExpend ("sql.apse (sql."+ x +", '"+"? "+"'), ");// при построении оператора sql PreparedStatement = con.prepareStatement (sql.toString ());Statement.setString (z ++, группа);// при установке этих значений

    Я не уверен, почему это так?неверный синтаксис?Кажется, это не обнаруживает набор?из отладки я также вижу: невозможно преобразовать SQLException с кодом ошибки '0'

  2. Если я использую String прямо, я получаю:

    org.springframework.jdbc.UncategorizedSQLException: StatementCallback;неклассифицированное исключение SQLException для SQL [
    SQL ИЗ ВЫШЕ - Я ПРОВЕРИЛ, И ЭТО РАБОТАЕТ];Состояние SQL [null];код ошибки [0];Утверждение не возвращало набор результатов .;вложенное исключение: com.microsoft.sqlserver.jdbc.SQLServerException: инструкция не возвращала набор результатов.

Я не уверен, что SQLслишком сложный или что.Но также запутался, как с помощью PreparedStatementCreator он не обнаружил?установить переменные ... У меня заканчиваются идеи.Я попробовал Multiqueries = true тоже

Если я использую SET NOCOUNT ON, я получаю другую ошибку: Невозможно решить исключение SQLException без классификации при вызове SQL Server с использованием JDBC

Так что я тоже немного сбит с толку.Я не вставляю много данных, так что, может быть, это не имеет значения?

Спасибо!

...