2016-07-08 87 views
2

我有一個SQL查詢,不幸的是不能寫爲一個準備好的語句,因爲它有可變的列名稱。正因爲如此,我必須使用字符串格式來構建我的SQL。我使用的語言是PostgreSQL,但是因爲我的查詢中有String.format,所以IntelliJ在我的代碼中抱怨語法錯誤。IntelliJ插入語言與String.format

public class Example { 
    public String getUniqueFeatureCountSqlQuery(String feature, Long sourceUserId) { 
     //language=PostgreSQL 
     return String.format("SELECT COUNT(DISTINCT targetUserId), %s FROM userComments GROUP BY %s WHERE userId = %d", 
      feature, feature, sourceUserId); 
    } 
} 

enter image description here

如何使的IntelliJ正確識別這個字符串?它應該知道它是由String.format首先格式化的PostgreSQL。

+0

你是什麼意思的可變列名稱?這些名字看起來硬編碼給我。這不會讓你容易受到SQL注入的影響嗎? –

+0

@TimBiegeleisen我的錯誤。我編輯了我的問題,所以現在應該更清楚了。假設「功能」已被消毒。 – michaelsnowden

+1

它似乎與這個固定的錯誤有關,但我無法讓它工作。 https://youtrack.jetbrains.com/issue/IDEA-139305 –

回答

2

感謝@WillHumphreys,我通過youtrack發現了一個解決方案。

您必須進入工具 - >數據庫 - >用戶參數下的用戶參數設置,或使用查找操作命令。

enter image description here

然後做出這些改變。

enter image description here

你也可能需要使用這些參數的參數索引字符串格式符號(String.format("SELECT %1s ...", ...))試圖爲Alt-Enter運行在控制檯上查詢時,便於識別。