Spring JDBC调用SQL Server函数返回不正确的数据

时间:2017-03-31 15:02:14

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

起初它看起来像一个相当新的人的愚蠢问题,但我的观察非常奇怪。由于数据和完整代码不可用,可能很难回答。如果可能的话,我正在寻找遇到类似问题和解决方案的人。

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时,我得到以下结果

enter image description here

现在我们来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中看到如下数据: enter image description here

当我们在java中添加/删除SQL查询字符串中的空格时,这不可靠。

尝试下面的事情找到原因:

  1. 查看SQL Server探查器以确保参数值和 查询是正确的(发现它是正确的)
  2. 调试Spring java 映射器检查值是否设置正确(发现它是正确的)
  3. 通过启用调试sqljdbc jar com.microsoft.sqlserver.jdbc.level=FINEST。 (即使在这里我也看到了 生成的控制台日志中的值不正确)
  4. this.jdbcTemplate.queryForList(query)。在这里我硬编码了 参数值,发现它返回正确的数据。
  5. 尝试使用最新版本的microsofts sql jdbc驱动程序sqljdbc42.jar
  6. 困惑和疑问:

    {i}版本的jdbcTemplate仅在我从sql查询中删除空格时才会返回正确的数据(就在最后一个?for参数之前),这可能是错误的?

    版本信息

    1. 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,混合模式)

    2. 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:)

    3. 上的Developer Edition(64位)
    4. SQL JDBC jar:sqljdbc4-42.jar

    5. Eclipse版本:Neon and Mars

    6. 操作系统:Windows 10

    7. Spring version 4.1.0.RELEASE

0 个答案:

没有答案