起初它看起来像一个相当新的人的愚蠢问题,但我的观察非常奇怪。由于数据和完整代码不可用,可能很难回答。如果可能的话,我正在寻找遇到类似问题和解决方案的人。
Java和SQL代码: 我有一个SQL查询,如下所示为jdbcTemplate的java字符串:
SELECT patientid, visitid, visitid1, visitid2, admitdate1, admitdate2, dischargedate1, dischargedate2, transfertype, sourcesystemuniqueidentifier FROM fn_XXXX_2017(?,?)
这里fn_XXXX_2017是一个SQL Server函数,它接受两个BIGINT
类型的参数,定义如下:
CREATE function [dbo].[fn_XXXX_2017]
( @id1 BIGINT ,@id2 BIGINT )
RETURNS TABLE
as
return
(
-- really big joins and unions
)
来自java的Spring jdbc调用如下:
long startRowNum = 111;
long endRowNum = 111;
List<Pojo> queryResult = this.jdbcTemplate.query(sqlQuery, new Object[]{startRowNum, endRowNum}, new MapperForPojo());
观察和案例: 当我直接执行SQL查询到SQL Server Management Studio时,我得到以下结果
现在我们来java看看关注
案例1 (哪种方法有效) 我们将jqcTemplate的SQL Query用作:
SELECT patientid, visitid, visitid1, visitid2, admitdate1, admitdate2, dischargedate1, dischargedate2, transfertype, sourcesystemuniqueidentifier FROM fn_XXXX_2017(?,?)
请注意(?,?)
中没有空格案例2 (结果不正确) 我们将jqcTemplate的SQL Query用作:
SELECT patientid, visitid, visitid1, visitid2, admitdate1, admitdate2, dischargedate1, dischargedate2, transfertype, sourcesystemuniqueidentifier FROM fn_XXXX_2017(?, ?)
请注意第二个问号前的空格为(?, [此处为空格] ?)
如果是两个(哪个不起作用)我在eclipse中看到如下数据:
当我们在java中添加/删除SQL查询字符串中的空格时,这不可靠。
尝试下面的事情找到原因:
com.microsoft.sqlserver.jdbc.level=FINEST
。 (即使在这里我也看到了
生成的控制台日志中的值不正确)this.jdbcTemplate.queryForList(query)
。在这里我硬编码了
参数值,发现它返回正确的数据。困惑和疑问:
{i}版本的jdbcTemplate仅在我从sql查询中删除空格时才会返回正确的数据(就在最后一个?for参数之前),这可能是错误的?
版本信息
Java版本:
java version&#34; 1.8.0_92&#34; Java(TM)SE运行时环境(版本1.8.0_92-b14) Java HotSpot(TM)64位服务器VM(版本25.92-b14,混合模式)
SQL Server版本:
Microsoft SQL Server 2012 - 11.0.2100.60(X64) 2012年2月10日19:39:15 版权所有(c)Microsoft Corporation Windows NT 6.2(Build 9200:)
SQL JDBC jar:sqljdbc4-42.jar
Eclipse版本:Neon and Mars
操作系统:Windows 10
Spring version 4.1.0.RELEASE