【发布时间】:2015-07-08 18:06:51
【问题描述】:
我使用 play framework 2.3.8 和 scala 开发 Web 应用程序,后端和前端架构复杂。作为后端,我们使用 MS SQL,有许多存储过程,并通过 anorm 调用它。这是问题之一。
我需要更新数据库中的一些字段。前端调用play框架,接收字段名和值。然后我解析,字段名称,然后我需要为更新字段生成 SQL 查询。我需要为所有参数分配空值,除了接收参数。我尝试这样做:
def updateCensusPaperXX(name: String, value: String, user: User) = {
DB.withConnection { implicit c =>
try {
var sqlstring = "Execute [ScXX].[updateCensusPaperXX] {login}, {domain}"
val params = List(
"fieldName1",
"fieldName2",
...,
"fieldNameXX"
)
for (p <- params){
sqlstring += ", "
if (name.endsWith(p))
sqlstring += value
else
sqlstring += "null"
}
SQL(sqlstring)
.on(
"login" -> user.login,
"domain" -> user.domain,
).execute()
} catch {
case e: Throwable => Logger.error("update CensusPaper04 error", e)
}
}
}
但实际上这并不适用于所有情况。例如,当我尝试保存字符串时,它会给我一个错误,例如:
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'some phrase'
使用除一个以外的所有空值的异常生成 sql 查询的最佳方法是什么?
【问题讨论】:
-
您只需使用
Option.empty[ParamType]传递一个JDBCNULL。
标签: sql-server scala playframework playframework-2.3 anorm