Clojure - Postgres 未找到合适的驱动程序

rbb*_*rbb 2 postgresql clojure

我已将我的 postgres 数据库定义为

(def db {:subprotocol "postgresql"
         :subname "//localhost:5432/mydb"
         :user "admin"
         :password "password"})
Run Code Online (Sandbox Code Playgroud)

我还定义了一个函数

(defn get-users []
  (sql/query db ["select * from users"]))
Run Code Online (Sandbox Code Playgroud)

sql在哪里 [clojure.java.jdbc :as sql]

如果我运行,(get-users)我会收到错误

SQLException No suitable driver found for jdbc:postgresql://127.0.0.1:5432/mydb  java.sql.DriverManager.getConnection (DriverManager.java:689)
Run Code Online (Sandbox Code Playgroud)

我从其他 Java 帖子中看到我需要使用加载驱动程序 Class.forName("org.postgresql.Driver");

1)这是什么意思?

2) 我如何做到这一点/解决我在 Clojure 中的错误?

Jos*_*osh 7

解决方案是将其添加到您:dependencies的 project.clj 中:

[org.postgresql/postgresql "42.1.4"]
Run Code Online (Sandbox Code Playgroud)

此外,虽然您的 db 定义很好,但:subname您也可以单独定义主机、端口和 db 名称,而不是连接的字符串,这使其更加模块化和可组合,以防其中任何一个发生更改:

(def db {:dbtype "postgresql"
         :dbname "mydb"
         :host "localhost"
         :port 5432
         :user "userrole"
         :password "password"})
Run Code Online (Sandbox Code Playgroud)