Clojure JDBC: Could not find Postgres driver

I am working on a web service that needs to talk to a database, so I am setting up my base libraries to give me access to postgres on my desktop.

Jun 5, 2013 1:27:46 PM com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask run WARNING: com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@15c313 da -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(DriverManager.java:264) 

In my db library i have

 (ns myapp.db (:import [com.mchange.v2.c3p0 ComboPooledDataSource])) (def specification { :classname "postgresql" :subprotocol "org.postgresql.Driver" :subname "//localhost:5432;database=test" }) (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) 

Then in my unit test:

 (ns myapp.db-test (:use clojure.test) (:require [myapp.db] [clojure.java.jdbc :as jdbc])) (let [db (myapp.db/connection)] (jdbc/with-connection db) (jdbc/with-query-results rs ["select * from foo"] (doseq [row rs] (println row))))) 

However, this works in REPL, at least I know that the database supports and accepts connections:

 user=> (require '[clojure.java.jdbc :as sql]) user=> (sql/with-connection "postgresql://localhost:5432/test" (sql/with-query-results results ["select * from foo"] (doseq [result results] (println result)))) {:y 2, :x 1} nil user=> 

Help with this is much appreciated!

My .clj project is as follows

 (defproject myapp "0.1.0" :description "myapp" :dependencies [ [org.clojure/clojure "1.5.1"] [org.clojure/java.jdbc "0.3.0-alpha4"] [postgresql "9.1-901.jdbc4"] [c3p0/c3p0 "0.9.1.2"]]) 
+4
source share
2 answers

I suggest correcting your specification

 (def specification { :subprotocol "postgresql" :classname "org.postgresql.Driver" :subname "//localhost:5432/test"}) 
+2
source

there may be other problems (I really love the newbie clojure), but you definitely have: classname and: subprotocol inverted in your specification .: the class name should be "org.postgresql.Driver" .: subprotocol should be "postgresql".

+2
source

Source: https://habr.com/ru/post/1484724/


All Articles