我已经为这个问题争论了一段时间,但我还没有找到解决方案。解释起来非常简单。
我有一个 Java 方法,它传递一个字符串作为参数,这个字符串是一个 SQL 查询。
当我执行这个传递字符串参数的查询时,我得到了 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 AS 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 AS 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 AND 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 的行。完美且正确。
当我在 INVOICE_DETAIL_CODE 列中添加我要查找的另一个值 DT-GORGPRF 时,它存在但仅在一行中,查询结果为:
IN ( 'DT-ASUTOP' , 'DT-AVMAH4' , 'DT-BAGTOP' , 'DT-BNDTOP' , 'DT-DIGTOP' , 'DT-FATTUT ' , 'DT-GORGPRF' )");
当我传递字符串参数时只返回 1 行,带有 DT-GORGPRF 的行并忽略最后 4 行。当我手动向 executeQuery 方法键入查询时,我得到了正确的结果。
这毫无意义。我可以获得有关如何解决该问题的意见吗?
最佳答案
在解决这个问题几天后,我们发现我们通过 StringBuilder 构建的动态查询包含一些无效字符,导致了这个问题。为了解决这个问题,我们将查询转换为 Ascii 字符,并删除了 ascii 中存在但不应该存在的所有 13 (/n)。我们注意到,在某些情况下,当使用逗号 (,) 时,StringBuilder 会添加/n 导致这种尴尬行为的字符..!!已解决。
关于java - 为什么在传递 String 参数时得到不正确的结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27565360/