我正在为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您可以在sqls
和sql
插补器上找到更多信息
如果您需要更多信息,请发表评论,我们将非常感谢您的反馈。
答案 0 :(得分:1)
您可以改用SQLSyntax#createUnsafely
。
这是一个危险的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类