使用JDBC调用SQL Server时无法解决未分类的SQLException

时间:2019-05-26 19:00:54

标签: java sql sql-server jdbc spring-jdbc

我正在使用JDBCTemplate通过以下方式查询SQL Server:

  

列表结果= 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和提取器。

我用PreparedStatementCreator和String来运行它:

  1. 当我使用PreparedstatementCreator并尝试设置2个变量时,出现索引超出范围错误“ com.microsoft.sqlserver.jdbc.SQLServerException:索引1超出范围。”: PreparedStatementCreator returnValue = new PreparedStatementCreator(){         @Override         public PreparedStatement createPreparedStatement(Connection con)抛出SQLException { sql.append(“(” + x +“,'” +“?” +“'),”); //在构造sql时 PreparedStatement语句= con.prepareStatement(sql.toString()); statement.setString(z ++,group); //设置这些值时

    我不确定为什么会这样吗?语法不正确吗?好像是没有检测到设置? 从调试我也看到: 无法翻译错误代码为'0'的SQLException

    1. 如果我直接使用String,我会得到:
        

      org.springframework.jdbc.UncategorizedSQLException:StatementCallback; SQL的未分类SQLException [
        上面的SQL-我进行了测试并进行了工作   ]; SQL状态[null];错误代码[0];该语句未返回结果集。嵌套的异常是com.microsoft.sqlserver.jdbc.SQLServerException:该语句未返回结果集。

我不确定SQL是否太复杂或什么。但也感到困惑的是,如何使用PreparedStatementCreator无法检测到?设置变量...我的想法已经用完了。我也尝试过Multiqueries = true

如果我使用SET NOCOUNT ON,则会收到其他错误: 使用JDBC调用SQL Server时无法解决未分类的SQLException

所以我也有点困惑。我插入的数据不是很多,所以没关系吗?

谢谢!

0 个答案:

没有答案