当我传递String参数时,为什么我的结果集不正确?

时间:2014-12-19 11:40:18

标签: java sql oracle

我已经讨论了这个问题一段时间了,我还没有找到解决方案。解释起来很简单。

我有一个Java方法,它传递一个String作为参数,这个String是一个SQL查询。

当我执行此查询时,传递String参数,我得到1行的结果。

  

ResultSet rs1 = stmt.executeQuery(sqlq);

当我在代码中输入完全相同的查询时,我得到正确的5行返回。

  

ResultSet rs1 = stmt.executeQuery(“SELECT a.GSM_NO AS   A_GSM_NO,a.START_DATE AS A_START_DATE,a.INVOICE_DETAIL_CODE AS   A_INVOICE_DETAIL_CODE,a.VALUE_VAT_EXCLUDED为A_VALUE_VAT_EXCLUDED,   b.GSM_NO AS B_GSM_NO,b.START_DATE AS   B_START_DATE,b.IN​​VOICE_DETAIL_CODE AS   B_INVOICE_DETAIL_CODE,b.VALUE_VAT_EXCLUDED为B_VALUE_VAT_EXCLUDED   FROM INVOICEPRINT_DETAIL_LEGACY a,INVOICEPRINT_DETAIL_GENESIS b WHERE   a.GSM_NO = b.GSM_NO AND a.START_DATE = b.START_DATE AND   a.INVOICE_DETAIL_CODE = b.INVOICE_DETAIL_CODE和a.INVOICE_DETAIL_CODE   IN('DT-ASUTOP','DT-AVMAH4','DT-BAGTOP','DT-BNDTOP',   'DT-DIGTOP','DT-FATTUT','DT-GORGPRF')“);

是的,我打印了字符串参数,内容完全相同,但输出不同。

我做了一些测试,当字符串的最后一部分只有:

  

IN('DT-ASUTOP','DT-AVMAH4','DT-BAGTOP','DT-BNDTOP',

     
    

'DT-DIGTOP')“);

  

它可以正确传递参数或手动输入查询。在这种情况下,它返回4行,因为在INVOICE_DETAIL_CODE字段中找到了4行DT-DIGTOP。完美正确。

当我添加DT-GORGPRF这是我在列INVOICE_DETAIL_CODE中寻找的另一个值时,它存在但只在一行中,查询结果为:

  

IN('DT-ASUTOP','DT-AVMAH4','DT-BAGTOP','DT-BNDTOP',   'DT-DIGTOP','DT-FATTUT','DT-GORGPRF')“);

当我传递String参数时,只返回1行,该行包含DT-GORGPRF并忽略最后4行。当我手动向executeQuery方法键入查询时,我得到了正确的结果。

这没有任何意义。我可以获得有关如何解决它的输入吗?

2 个答案:

答案 0 :(得分:0)

在这个问题的最后几天,我们发现我们通过StringBuilder构建的动态查询有一些无效字符导致了这一点。为了解决方法,我们将Query转换为Ascii字符并删除ascii中存在的所有13(/ n)并且不应该存在。我们注意到在某些情况下使用comas(,)时,StringBuilder会添加/ n个字符,导致这种尴尬行为。!!解决。

答案 1 :(得分:-1)

在java代码中删除(')并测试。

IN ( DT-ASUTOP , DT-AVMAH4 , DT-BAGTOP , DT-BNDTOP , DT-DIGTOP , DT-FATTUT , DT-GORGPRF )");