GacuheのDBアクセスと例外処理
いわゆるtry-catch-finallyみたいな感じでデータ−ベースコネクションをクローズしようとしたら、guard構文にdynamic-windというのを使うんだろうか。
(use dbi) (use gauche.collection) (let ((conn #f) (query #f) (result #f)) (guard (e ((<dbi-error> e) ;; handle error )) (dynamic-wind (lambda () ) (lambda () (set! conn (dbi-connect "dbi:mysql:test;host=dbhost")) (set! query (dbi-prepare conn "SELECT id, name FROM users")) (set! result (dbi-execute query)) ;; something to process result result) (lambda () (dbi-close result) (dbi-close query) (dbi-close conn)))))
これだと非常に手続き的だけど、他に書き方はないかな。