我已经讨论了这个问题一段时间了,我还没有找到解决方案。解释起来很简单。
我有一个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.INVOICE_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方法键入查询时,我得到了正确的结果。
这没有任何意义。我可以获得有关如何解决它的输入吗?
答案 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 )");