2016-07-08 85 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运行在控制台上查询时,便于识别。