【发布时间】:2014-12-22 17:30:24
【问题描述】:
我已经为这个问题争论了一段时间,但我还没有找到解决方案。解释起来很简单。
我有一个将字符串作为参数传递的 Java 方法,这个字符串是一个 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 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 和 a.INVOICE_DETAIL_CODE IN('DT-ASUTOP','DT-AVMAH4','DT-BAGTOP','DT-BNDTOP', 'DT-DIGTOP' , 'DT-FATTUT ' , 'DT-GORGPRF' )");
是的,我打印了String Parameter,内容完全一样,虽然输出不同。
我做了一些测试,当字符串的最后一部分只有:
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' )");
当我传递字符串参数时,只返回 1 行,带有 DT-GORGPRF 的行并忽略最后 4 行。当我手动向 executeQuery 方法键入查询时,我得到了正确的结果。
这毫无意义。我可以就如何解决这个问题提供意见吗?
【问题讨论】:
-
我的猜测是当你在java中运行它时你只读取第一行。
-
不,我的代码会打印 ResultSet 中的所有值。当我通过参数传递查询时,它会打印 1 行。当我传递查询时,直接键入它会打印 5 行,因为它应该...
-
fwiw - 您可能在 DT-FATTUT 之后有一个杂散空间。
-
我删除了构造查询字符串的方法上的所有空格,结果完全一样。 =/
-
START_DATE 是关键字...