0

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

select方法旨在从 Product 表中提取某些列,指定为所需列的逗号分隔列表(字符串)。

我希望能够这样称呼它: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)

在这里您可以找到有关sqlssql插值器的更多信息

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

4

2 回答 2

1

你可以SQLSyntax#createUnsafely改用。

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

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

于 2014-11-17T09:10:32.237 回答
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 类

于 2014-11-12T18:24:27.503 回答