2016-02-04 92 views
0

我正在運行JAVA查詢,查詢包含DATEDIFF函數,其中參數是一個關鍵字,我們可以給yy,mm,day等等。所以我將這些關鍵字從用戶作爲參數獲取設置它在查詢中,但問題是它不會執行,它提供了一個異常作爲參數1的無效參數。如果我在CLIENT中運行相同的查詢,它會給出結果,但如果我給像'天'這樣的關鍵字引號,它會給出同樣的錯誤也在CLIENT中。所以我的問題是如何將它設置在JAVA的查詢中。目前正在做這樣DATEDIFF不工作在JAVA

for (String param : params) { 
try { 
     namedParameterStatement.setObject(param,requiredFilterValues.get(param)); 
    } catch (RuntimeException e) { 
     } 
} 

這是查詢我使用

SELECT CUST_KEY,Eff_Date_From,Eff_Date_To, DATEDIFF(:intervals,Eff_Date_From,Eff_Date_To) as datediffs,Active FROM CUSTOMER_DIM WHERE Active = :active 

想過去值PARAMS intervalsactive,問題是:intervals,因爲它需要的關鍵字。

我認爲Java程序設置參數爲字符串,這就是爲什麼它的生成錯誤..我怎麼能實現這個?

+0

您需要提供更多代碼:至少使用查詢和參數值,因爲我們不能用提供的代碼回答您的問題。對於我們所知道的,您正在嘗試將該函數分配爲參數**值**。 –

+0

@MarkRotteveel沒有我沒有傳遞函數作爲參數值,我明確指定我的查詢包含DATEDIFF函數,它採用各種關鍵詞,該關鍵字正在傳遞作爲參數和設置在我的查詢 –

回答

0

問題是您只能使用參數化查詢來傳遞值。您無法傳遞關鍵字(也不是對象名稱)。在你的查詢的情況下。他們將以相當於DATEDIFF('<your-keyword>', ..的身份獲得通過,這也不起作用。

有手動除外串聯所需的關鍵字輸入到查詢,或使用CASE -construct根據傳遞的值來獲得正確的價值創造一個令人費解的查詢無解:

case ? when 'MONTH' then datediffer(MONTH, ..) when .. end 

您可能需要明確地將該參數轉換爲VARCHAR以使其起作用。