我想从Scala集合生成动态SQL where
子句,例如Map
示例,带有Map("firstName" -> "Chuck", "lastName" -> "Norris")
个对象,
我想生成以下子句:
where firstName = 'Chuck'
and lastName = 'Norris'
基本上,对于集合中的第一个元素,前面带有where
关键字,对于后续的元素,前面带有and
。
我真的很难在Scala中做这个算法,所以我在寻求你的帮助。
也许Map
不适合这项任务?
答案 0 :(得分:6)
可能的解决方案是:
myMap.map {case (k, v) => """%s = '%s'""".format(k, v)}
.mkString("where ", "\nand ", "")
将map
函数的格式转换为键/值为key = 'value'
,mkString
构建where子句。
答案 1 :(得分:3)
并且,因为有人需要说出来,为了上帝的缘故,在生产代码中不要做这样的事情!这种事情只是在乞求SQL注入攻击,在这种攻击中,有人会向你提供损坏的输入,你盲目地将其格式化为SQL,这与你想要的东西截然不同。这是一个例子:http://xkcd.com/327/
答案 2 :(得分:0)
只要您生成实际的SQL语句,您可能希望查看更强大的数据库访问模型。我最喜欢的是Squeryl,但还有其他口味。