2014-12-19 78 views
2

我一直在争论这个问题一段时间,我还找不到解决方案。这很容易解释。当我传递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.IN​​VOICE_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方法我得到正确的结果。

这没有意义。我能得到关于如何解决它的输入吗?

+0

我的猜测是,当你在java中运行它时,你只能读第一行。 – 2014-12-19 11:44:47

+0

不,我的代码打印结果集中的所有值..当我通过参数查询它打印1行..当我通过查询直接打字它打印5行,因为它应该... – 2014-12-19 11:47:00

+0

fwiw - 你在DT-FATTUT之后可能有一个杂散空间。 – 2014-12-19 12:00:04

回答

0

在这个问题上,我们发现,我们通过一个StringBuilder正在构建动态查询有导致此部分无效字符的顶部相当长的一段日子后嘛。为了解决这个问题,我们将Query转换为Ascii字符,并删除所有存在于ascii中的13(/ n),并且不应该在那里。我们注意到在某些情况下,当使用逗号(,)时,StringBuilder添加了导致这种awkard行为的/ n个字符。解决了。

-1

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

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

如果我删除(')SQL假设,则不起作用减法信号。我正尝试用(\')现在 – 2014-12-19 11:59:09

+0

任何一种方式都行不通 – 2014-12-19 12:01:18

相关问题