2016-07-08 6 views
2

Ich habe eine SQL-Abfrage, die leider nicht als vorbereitete Anweisung geschrieben werden kann, da sie variable Spaltennamen hat. Aus diesem Grund muss ich mein SQL mit String-Formatierung erstellen. Die Sprache, die ich benutze, ist PostgreSQL, aber weil ich String.format in meinen Abfragen habe, beschwert sich IntelliJ über Syntaxfehler in meinem Code.IntelliJ Inject-Sprache mit 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

Wie mache ich IntelliJ diese Zeichenfolge richtig erkennen? Es sollte wissen, dass es PostgreSQL ist, das zuerst von String.format formatiert wird.

+0

Was meinen Sie mit variablen Spaltennamen? Die Namen sehen für mich fest codiert aus. Wäre das nicht anfällig für SQL-Injektionen? –

+0

@TimBiegeleisen Mein Fehler. Ich habe meine Frage bearbeitet, so dass sie jetzt klarer sein sollte. Angenommen, "Feature" wurde bereits bereinigt. – michaelsnowden

+1

Es scheint mit diesem behobenen Fehler zu tun zu haben, aber ich konnte es nicht zum Laufen bringen. https://youtrack.jetbrains.com/issue/IDEA-139305 –

Antwort

2

Dank @WillHumphreys fand ich eine Lösung über youtrack.

Sie müssen die Einstellungen der Benutzerparameter unter Extras -> Datenbank -> Benutzerparameter gehen oder den Befehl find action verwenden.

enter image description here

Dann diese Änderungen vornehmen.

enter image description here

Sie können auch das Argument Index-String-Format-Notation (String.format("SELECT %1s ...", ...)) für die Parameter verwenden, um unterscheidbar zu sein, wenn versucht wird, die Abfrage in der Konsole Alt-Eingabe auszuführen.