我一直在争论这个问题一段时间,我还找不到解决方案。这很容易解释。当我传递String参数时,为什么我的结果集不正确?
我有一个Java方法传递一个字符串作为参数,这个字符串是一个SQL查询。
当我执行此查询传递字符串参数我得到1行的结果。
ResultSet rs1 = stmt.executeQuery(sqlq);
当我在代码中输入完全相同的查询时,我得到5行的正确返回值。
结果集RS1 = stmt.executeQuery(“选择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一个,INVOICEPRINT_DETAIL_GENESIS b其中 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-ASUT OP','DT-AVMAH4','DT-BAGTOP','DT-BNDTOP', 'DT-DIGTOP','DT-FATTUT','DT-GORGPRF')“);
是的,我打印的字符串参数和内容是完全一样的,虽然输出是diferent。
我做了一些测试,当字符串的最后部分只有:
IN( 'DT-ASUTOP', 'DT-AVMAH4', 'DT-BAGTOP', 'DT-BNDTOP' ,
'DT-DIGTOP')“);
它的工作原理正确地传递参数或手动键入查询在这种情况下它返回4行,因为在该领域INVOICE_DET。找到带DT-DIGTOP的AIL_CODE 4行。完美和正确。
当我添加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中运行它时,你只能读第一行。 – 2014-12-19 11:44:47
不,我的代码打印结果集中的所有值..当我通过参数查询它打印1行..当我通过查询直接打字它打印5行,因为它应该... – 2014-12-19 11:47:00
fwiw - 你在DT-FATTUT之后可能有一个杂散空间。 – 2014-12-19 12:00:04