2014-12-19 77 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

相關問題