首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure / SQLServer:如何使用Clojure连接池调用存储过程

Clojure / SQLServer:如何使用Clojure连接池调用存储过程
EN

Stack Overflow用户
提问于 2013-07-03 07:03:37
回答 1查看 1.9K关注 0票数 5

遵循下面的示例

https://github.com/clojure/java.jdbc/blob/master/doc/clojure/java/jdbc/ConnectionPooling.md

关于jdbc连接池,我在Clojure应用程序中设置了一个到SQLServer的连接池,如下所示

代码语言:javascript
复制
;; Database Connection Handling.
(ns myapp.db
    (:import [com.mchange.v2.c3p0 ComboPooledDataSource]))

;; ### specification
;; Defines the database connection parameters.
(def specification {
    :classname "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    :subprotocol "sqlserver"
    :subname "//some;info;here"
})

;; ### pooled-data-source
;; Creates a database connection pool using the
;; <a href="https://github.com/swaldman/c3p0">c3p0</a> JDBC
;; connection pooling library.
(defn pooled-data-source [specification]
    (let [datasource (ComboPooledDataSource.)]
        (.setDriverClass datasource (:classname specification))
        (.setJdbcUrl datasource (str "jdbc:" (:subprotocol specification) ":" (:subname specification)))
        (.setUser datasource (:user specification))
        (.setPassword datasource (:password specification))
        (.setMaxIdleTimeExcessConnections datasource (* 30 60))
        (.setMaxIdleTime datasource (* 3 60 60))
        {:datasource datasource}))

;; ### connection-pool
;; Creates the connection pool when first called.
(def connection-pool
    (delay
        (pooled-data-source specification)))

;; ### connection
;; Get a connection from the connection pool.
(defn connection [] @connection-pool)

我知道如何使用连接来创建select和insert语句等,我的问题是如何使用它来调用存储过程并收集输出,这些输出可能是各种形状和大小的记录?

代码语言:javascript
复制
;; ### Definitions of queries.
(ns myapp.query
     (:require [myapp.db]))

;; HOW DO I CALL THIS PROC THROUGH A POOLED CONNECTION?
(defn call-the-stored-proc []
    (str "{ call someStoredProcForMyApp("...")}"))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-03 09:09:59

对于不需要OUT参数的基本存储过程,可以使用db-do-prepared

代码语言:javascript
复制
(require '[clojure.java.jdbc :as j])
(j/db-do-prepared (connection) "EXEC YourStoredProc ?" [COLUMN_NAME])

它调用您的connection函数,文档中说要调用的就是这个函数。

我已经开始向JDBC添加完整的可调用语句支持,但我还没有时间完成这项工作。它是Clojue JIRA中的issue JDBC-48,以及我的进度is in the sprocs branch of my fork

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17437220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档