我正在尝试通过使用部分应用的函数在 scala 中围绕我的数据库调用创建一个方便的包装器:
def queryResult[B](connection: Connection, sql: String)(process: (CallableStatement,ResultSet) => B): B =
using (connection) { connection =>
using (connection.prepareCall(sql)) { statement =>
var rs: ResultSet = null
try {
process(statement, rs)
} finally if (rs != null) {
try {
rs.close()
}
catch {
case e: SQLException => {}
}
}
}
}
主要用于自动关闭连接/结果集。但是,我希望rs
变量作为 var 而不是 val 返回。每当我尝试将 rs 分配给查询中的结果集时,我都会收到一个错误,我无法将其重新分配给 val。
或者,如果您有其他方法可以最大限度地重用打开/关闭流/连接的代码,也请分享。
编辑:正如 Randall Schulz 提到的,Scala ARM将解决实际问题。但是,Scala 不支持我发布的问题。