I think I was leaking result sets.
(defn oracle-insert-record [table pk-col-name pk-seq-name record]
(let [sql (oracle-insert-sql table pk-col-name pk-seq-name (keys record))]
(with-open [^PreparedStatement pstmt (.prepareStatement
(jdbc/connection) sql,
(into-array
[(jdbc/as-identifier pk-col-name)]))]
(set-parameters pstmt (vals record))
(jdbc/transaction
(.executeUpdate pstmt)
(with-open [rs (.getGeneratedKeys pstmt)]
(vec (ijdbc/resultset-seq* rs)))))))
On Tuesday, April 24, 2012 11:04:11 PM UTC-4, Michael wrote:
>
> Would be convenient to have set-parameters public. I'm experimenting with
> a couple of fns to insert into oracle and oracle's sequences for generated
> keys are a headache. What's below is not fully tested but should give you
> an idea of the sql I'm dealing with. Any pointers on how to leaverage
> java.jdbc more with less custom code would be appreciated.
>
> (defn- oracle-insert-sql [table pk-col-name pk-seq-name ks]
> (let [cols (apply str (interpose \, (map jdbc/as-identifier ks)))
> n (count ks)
> qmarks (apply str (interpose \, (repeat n \?)))]
> (str "insert into " (jdbc/as-identifier table)
> \( (jdbc/as-identifier pk-col-name) \, cols ") values ("
> (jdbc/as-identifier pk-seq-name) ".nextval," qmarks \))))
>
> (defn oracle-insert-record [table pk-col-name pk-seq-name record]
> (let [sql (oracle-insert-sql table pk-col-name pk-seq-name (keys
> record))]
> (with-open [^PreparedStatement pstmt (.prepareStatement
> (jdbc/connection) sql,
> (into-array
> [(jdbc/as-identifier pk-col-name)]))]
> (set-parameters pstmt (vals record))
> (jdbc/transaction
> (.executeUpdate pstmt)
> (vec (ijdbc/resultset-seq* (.getGeneratedKeys pstmt)))))))
>
> (defn oracle-insert-records [table pk-col-name pk-seq-name & records]
> (when-let [record (first records)]
> (let [ks (keys record)
> sql (oracle-insert-sql table pk-col-name pk-seq-name (keys
> record))
> value-groups (map #(map (partial get %) ks) records)]
> (apply jdbc/do-prepared sql value-groups))))
>
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en