在Scala中调用变量的字符串插补器

时间:2014-11-12 14:07:10

标签: database scala playframework scalikejdbc

我正在为Scala中的类编写一些数据库查询辅助方法。

select方法用于从Product表中提取某些列,指定为所需列的逗号分隔列表(String)。

我希望能够像这样调用它:Product.select("id, title")

以下代码不起作用:

  def select(columns: String) = { DB.readOnly{ implicit session =>
    sql"select ${columns} from $sqlTable limit 1000".map(row => Product(row)).list.apply()
  }}

但是这段代码(仅用于说明目的)

  def select(columns: String) = { DB.readOnly{ implicit session =>
    var x = sqls"id, title, description, available_online"
    sql"select ${x} from $sqlTable limit 1000".map(row => Product(row)).list.apply()
  }}

现在,显然我不想将列硬编码到方法中,但我想用columns参数字符串(我希望你抓住我的漂移)来做这个。如何在列字符串上应用sqls插补器?

就像var x = sqls(columns)

Here您可以在sqlssql插补器上找到更多信息

如果您需要更多信息,请发表评论,我们将非常感谢您的反馈。

2 个答案:

答案 0 :(得分:1)

您可以改用SQLSyntax#createUnsafely

https://github.com/scalikejdbc/scalikejdbc/blob/2.2.0/scalikejdbc-core/src/main/scala/scalikejdbc/interpolation/SQLSyntax.scala#L220

这是一个危险的API。我知道你非常了解SQL注入漏洞。

答案 1 :(得分:0)

检查类SQLSyntax。它可以用于您的目的。 “sqls”是SQLSyntax的语法糖

def select(columns: String) = { DB.readOnly{ implicit session =>
var x = SQLSyntax("id, title, description, available_online", Seq.empty)
sql"select ${x} from $sqlTable limit 1000".map(row => Product(row)).list.apply()}}

如果您有兴趣,请参阅SQLInterpolationString类