2011-01-10 57 views
2

我已经定义了以下代码,以允许我在java.sql.PreparedStatement中设置列值。这段代码是否合理/惯用?如何改进?使用Clojure do-template设置预准备语句列

(use '(clojure.template :only [do-template])) 
; (import all java types not in java.lang) 

(defprotocol SetPreparedStatement 
    (set-prepared-statement [this prepared-statement index])) 

(do-template [type-name set-name] 
    (extend-type type-name 
    SetPreparedStatement 
    (set-prepared-statement [this prepared-statement index] 
     (set-name prepared-statement index this))) 

    BigDecimal .setBigDecimal 
    Boolean .setBoolean 
    Byte .setByte 
    Date .setDate 
    Double .setDouble 
    Float .setFloat 
    Integer .setInt 
    Long .setLong 
    Object .setObject 
    Short .setShort 
    Time .setTime 
    Timestamp .setTimestamp) 

; Sample use 
(set-prepared-statement 42 some-prepared-statement 1) 

回答

1

你的例子看起来接近惯用的Clojure我可以告诉大家:) 这也许可以从抽象类型映射出来,如果你有在这里您将创建虽多于一个模板,如果你只是建立的情况下受益这一个,那么这对我来说看起来很不错。