从Scala集合生成动态SQL where子句

时间:2012-03-19 22:29:58

标签: scala collections scala-collections

我想从Scala集合生成动态SQL where子句,例如Map

示例,带有Map("firstName" -> "Chuck", "lastName" -> "Norris")个对象, 我想生成以下子句:

where firstName = 'Chuck'
and lastName = 'Norris'

基本上,对于集合中的第一个元素,前面带有where关键字,对于后续的元素,前面带有and

我真的很难在Scala中做这个算法,所以我在寻求你的帮助。 也许Map不适合这项任务?

3 个答案:

答案 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,但还有其他口味。