【问题标题】:Clojure JDBC: How to Use Pooled Connection for QueryClojure JDBC:如何使用池连接进行查询
【发布时间】:2013-06-05 21:03:03
【问题描述】:

我正在关注这个关于使用 c3p0 进行连接池的教程。 https://github.com/clojure/java.jdbc/blob/master/doc/clojure/java/jdbc/ConnectionPooling.md

然后我尝试使用连接运行查询:

(let [db (myapp.db/connection)]
    (jdbc/with-connection db)
        (jdbc/with-query-results rs ["select * from foo"]
            (doseq [row rs]
                (println row)))))

但是得到这个异常

Exception in thread "main" java.lang.IllegalArgumentException: db-spec {:connection nil, :level 0, :legacy true} is missing a required parameter
    at clojure.java.jdbc$get_connection.invoke(jdbc.clj:221)
    at clojure.java.jdbc$with_query_results_STAR_.invoke(jdbc.clj:980)
    at myapp.db_test$eval604.invoke(myapp_test.clj:12)
    at clojure.lang.Compiler.eval(Compiler.java:6619)

根据教程,这里是我的 myapp.db

(def specification {
    :classname "com.mysql.jdbc.Driver"
    :subprotocol "mysql"
    :subname "//localhost:3306/test"
    :user "root"
})

(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}))

(def connection-pool
    (delay
        (pooled-data-source specification)))

(defn connection [] @connection-pool)

提前致谢!

【问题讨论】:

    标签: mysql jdbc clojure c3p0


    【解决方案1】:

    jdbc/with-connection 在规范之后将要在该连接中运行的命令作为参数。您在 with-connection 创建的上下文中没有运行任何命令,而是在它之外运行所有未绑定数据库连接的命令。

    试试这个版本:

    (let [db (myapp.db/connection)]
      (jdbc/with-connection db
        (jdbc/with-query-results rs ["select * from foo"]
            (doseq [row rs]
                (println row))))))
    

    【讨论】:

      猜你喜欢
      • 2013-02-23
      • 1970-01-01
      • 2011-01-11
      • 2011-07-08
      • 1970-01-01
      • 2016-07-06
      • 2011-03-06
      • 1970-01-01
      • 2015-02-25
      相关资源
      最近更新 更多