2016-07-08 8 views
2

私は残念なことに、変数名が可変なので準備文として書くことはできません。このため、私は文字列フォーマットを使用してSQLを構築する必要があります。私が使用している言語はPostgreSQLですが、私のクエリにString.formatがあるため、IntelliJは自分のコードの構文エラーについて苦情を言います。私はIntelliJのが適切にこの文字列を認識させるにはどうすればよいIntelliJ Inject Language with 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

? 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

また、コンソールでクエリを実行するAlt-Enterキーしようとしたときに識別可能にパラメータの引数のインデックス文字列形式の表記(String.format("SELECT %1s ...", ...))を使用する必要があります。