部分的に適用された関数を使用して、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
ただし、変数を val ではなく var として返したいと思います。クエリからの結果セットに rs を割り当てようとすると、val に再割り当てできないというエラーが表示されます。
または、ストリーム/接続を開閉するためのコードの再利用を最大化する他の方法がある場合は、それも共有してください。
編集: Randall Schulz が述べたように、Scala ARMは実際の問題に対処します。ただし、投稿した質問は Scala ではサポートされていません。