我想从 Anorm 中的 SQL 查询中将多个值插入到表中。在以下代码段中,有没有办法将用户名列表绑定为值,而不仅仅是一个用户名?
SQL("insert into users (username) " +
"values ({username})").on(
'username -> username,
).executeUpdate()
作为替代方案,我可以从我的输入中创建一个连接的字符串,但这很容易受到 SQL 注入的影响并且不是很干净。
我想从 Anorm 中的 SQL 查询中将多个值插入到表中。在以下代码段中,有没有办法将用户名列表绑定为值,而不仅仅是一个用户名?
SQL("insert into users (username) " +
"values ({username})").on(
'username -> username,
).executeUpdate()
作为替代方案,我可以从我的输入中创建一个连接的字符串,但这很容易受到 SQL 注入的影响并且不是很干净。
使用 Anorm 一次插入多个值的一种可能方法:
var fields: List[String] = Nil
var values: List[(String,ParameterValue[_])] = Nil
for ((username,i) <- usernames.zipWithIndex) {
fields ::= "({username%s})".format(i)
values ::= ("username" + i, username)
}
SQL("INSERT INTO users (username) VALUES %s".format(fields.mkString(",")))
.on(values: _*)
.executeUpdate()
您想对所有值重复插入命令吗?
如何将它包装在 foreach 中:
usernames.foreach(username =>
SQL("insert into users (username) " +
"values ({username})").on(
'username -> username,
).executeUpdate())
或者类似的东西。
Anorm 是一个相对简单的库——在此处查看代码: https ://github.com/playframework/Play20/tree/master/framework/src/anorm/src/main/scala/anorm